C# 使用LINQ向集合中添加缺少的项
我有两个来自不同类的集合,它们具有以下两个commpon属性: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
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列表中只有salesClass2
的项目,只需保留一个字符串
@KernelMode yes correct:)。。。但是,如果Class2列表中的ItemID不在Class1列表中,那么它的销售设置为0…使用联接。请参阅msdn:为什么您告诉我们有关Class2
这个类是否涉及某种原因?@Fabio是的,因为它包含所有项目,有销售的项目和没有销售的项目。。。Class1列表中只有salesClass2
的项目,只需保留一个字符串
@KernelMode yes correct:)。。。但是,如果Class2列表中的ItemID不在Class1列表中,那么它的销售额设置为0。。。