我有两个来自不同类的集合,它们具有这两个共同属性:
public class Class1
{
public string ItemID {get;set;}
public int sales {get;set;}
}
public class Class2
{
public string ItemID {get;set;}
}
现在这里发生了什么,我有两个包含这些类型的类的集合,如下所示:
List<Class1> list1; // has items that actually have sales...
List<Class1> list2; // has all items that have or don't have sales
list1
缺少根本没有销售的商品。我在这里想做的是通过 itemID
比较这两个列表,如果 itemID
丢失,那么我会将丢失的项目添加到 list1
手动将属性 sales
设置为 0。
当找到丢失的元素时,我想这样做:
list1.Add(new Class1
{
Sales = 0,
ItemID = ItemID,
});
或者通过其他方式添加缺少的商品并将其属性 sales
设置为 0...
有人可以帮我吗?
编辑:
伙计们,我想我还有更多要做的解释...所以基本上,如果 Class2 列表中的 ItemID 不存在于 Class1 列表中,那么它将添加到 Class1 列表中,并将属性“Sales”设置为 0....
最佳答案
你可以试试
var missingItems =
list2.Where(class2 => list1.Any(class1 => class1.ItemId == class2.ItemId) == false)
.Select(class2 => new Class1
{
ItemId = class2.ItemId,
Sales = 0
});
list1.AddRange(missingItems);
为了 Where
获得更好的性能您可以创建HashSet<string>
的条款的list1
.
var existedIds = new HashSet<string>(list1.Select(class1 => class1.ItemId));
var missingItems =
list2.Where(class2 => existedIds.Contains(class2.ItemId) == false)
.Select(class2 => new Class1
{
ItemId = class2.ItemId,
Sales = 0
});
list1.AddRange(missingItems);
关于c# - 使用 LINQ 将缺失的项目添加到集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44874144/