c# - 复制匹配 id 的值
问题描述
首先,阅读下面的类代码。在那里你会发现一个名为 CommonId 的属性,它在 Item 类和 ItemGallery 中很常见,并且都具有匹配的 int 值。现在检查作为主控制台程序的 Program 类。在这里,我向这两个类添加了一些数据以作为示例。在主程序类的底部,我试图遍历每个项目并找到它的 commonId 与 ItemGallery commonId 匹配,如果该 commonId 匹配然后在 ItemGallery ItemId 将从其匹配的项目 Id 中复制。主要目标是 - 只需将 Item 类 Id 的副本复制到具有匹配 commonId 的 ItemGallery ItemId。怎么做?我已经尝试过像下面这样的 foreach ,但这不是正确的方法。
主程序类:
class Program {
static void Main(string[] args) {
List<Item> MyItemList = new List<Item>();
MyItemList.Add(new Item {
CommonId = 502,
Id = 3,
Link = "some string1"
});
MyItemList.Add(new Item {
CommonId = 502,
Id = 4,
Link = "some string2"
});
MyItemList.Add(new Item {
CommonId = 502,
Id = 5,
Link = "some string3"
});
MyItemList.Add(new Item {
CommonId = 506,
Id = 6,
Link = "some string4"
});
List<ItemGallery> MyitemGalleries = new List<ItemGallery>();
MyitemGalleries.Add(new ItemGallery {
CommonId = 502,
Link = "",
});
MyitemGalleries.Add(new ItemGallery {
CommonId = 502,
Link = "",
});
MyitemGalleries.Add(new ItemGallery {
CommonId = 502,
Link = "",
});
foreach (var _MyItemList in MyItemList) {
MyitemGalleries.FirstOrDefault().ItemId = _MyItemList.Where(x => x.CommonId == MyitemGalleries.CommonId).FirstOrDefault().Id;
}
Console.ReadKey();
}
}
班级:
class Item {
public int Id { get; set; }//this id need to set to ItemGallery ItemId matching their CommonId
public int CommonId { get; set; }
public string Link { get; set; }
}
class ItemGallery {
public int ItemId { get; set; }
public int CommonId { get; set; }
public string Link { get; set; }
}
解决方案
如果我理解你并且忽略任何其他问题,那么几乎没有办法做到这一点。但是,一个简单的foreach
,FirstOrDefault
应该做的
foreach (var gallery in MyitemGalleries)
{
var item = _MyItemList.FirstOrDefault(x => x.CommonId == gallery.CommonId);
// note if there are none we choose not to do anything, or grab the first
if(item == null)
continue;
gallery.ItemId = item.Id;
}