使用LINQ将缺少的项添加到集合中

时间:2017-07-02 18:51:36

标签: c# asp.net asp.net-mvc linq c#-4.0

我有两个来自不同类的集合,它们具有以下两个commpon属性:

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 ...

有人能帮助我吗?

编辑:

伙计我认为我还有更多解释要做...所以基本上如果Class1列表中的ItemID不存在于Class1列表中,那么它会被添加到Class1列表中,属性“Sales”设置为0 .... / p>

1 个答案:

答案 0 :(得分:4)

你可以尝试

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);