Skip to main content
 首页 » 编程设计

c#之使用 LINQ 将缺失项添加到集合

2024年02月05日28mayingbao

我有两个来自不同类的集合,它们具有这两个共同属性:

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