C# 使用LINQ向集合中添加缺少的项

C# 使用LINQ向集合中添加缺少的项,c#,asp.net,asp.net-mvc,linq,c#-4.0,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

我有两个来自不同类的集合,它们具有以下两个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
或者以其他方式添加缺少的项目并将其属性
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
子句,您可以创建
list1
HashSet

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);
var existedIds=newhashset(list1.Select(class1=>class1.ItemId));
var missingItems=
list2.Where(class2=>existedIds.Contains(class2.ItemId)==false)
.选择(类别2=>新类别1
{ 
ItemId=class2.ItemId,
销售额=0
}); 
列表1.添加范围(缺失项);
您可以试试

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
子句,您可以创建
list1
HashSet

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);
var existedIds=newhashset(list1.Select(class1=>class1.ItemId));
var missingItems=
list2.Where(class2=>existedIds.Contains(class2.ItemId)==false)
.选择(类别2=>新类别1
{ 
ItemId=class2.ItemId,
销售额=0
}); 
列表1.添加范围(缺失项);

使用连接。请参阅msdn:为什么您告诉我们有关
Class2
这个类是否涉及某种原因?@Fabio是的,因为它包含所有项目,有销售的项目和没有销售的项目。。。Class1列表中只有sales
Class2
的项目,只需保留一个
字符串
@KernelMode yes correct:)。。。但是,如果Class2列表中的ItemID不在Class1列表中,那么它的销售设置为0…使用联接。请参阅msdn:为什么您告诉我们有关
Class2
这个类是否涉及某种原因?@Fabio是的,因为它包含所有项目,有销售的项目和没有销售的项目。。。Class1列表中只有sales
Class2
的项目,只需保留一个
字符串
@KernelMode yes correct:)。。。但是,如果Class2列表中的ItemID不在Class1列表中,那么它的销售额设置为0。。。