2017-07-02 71 views
0

項目集合我從有這兩個commpon性質不同類別的兩個集合:將缺少使用LINQ

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

有人可以幫我嗎?

編輯:

傢伙,我認爲我的hve更多的解釋做......所以基本上如果從Class2中列表中的條目標識沒有出現在列表中的Class1,那麼它加入到財產的Class1列表「銷售」設置0 ....

+1

使用加入。請參閱msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

+1

爲什麼你告訴我們關於'Class2'的問題,這個類是不是涉及到了? – Fabio

+0

@Fabio是的,因爲它包含所有項目,有銷售的,沒有銷售的...... Class1列表只包含銷售的項目 – User987

回答

3

您可以嘗試

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條款更好的性能,您可以創建list1HashSet<string>

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