2016-12-02 28 views
2

假设我有两个列表。查找两个列表中的财产差异

我们知道列表中的项目数量是相同的,并且该ID匹配。

但是,一个或多个属性(ID除外)可能已更改。在这种情况下,两个量的变化:

List1 
--------- 
{ 
    ItemId: 1 
    Quantity: 10 
} 
{ 
    ItemId: 2 
    Quantity: 12 
} 
{ 
    ItemId: 3 
    Quantity: 1 
} 

然后匹配项目几乎相同的列表...

List2 
--------- 
{ 
    ItemId: 1 
    Quantity: 10 
} 
{ 
    ItemId: 2 
    Quantity: 3 
} 
{ 
    ItemId: 5 
    Quantity: 1 
} 

除了遍历他们每个人的和比较数量的财产,是有一种方法可以比较两个列表,找到发生更改的ID,然后仅对已更改的项目调用Update方法?

换句话说,我只是试图避免循环遍历每个列表。使用

+0

使用'的GroupBy '找到重复的东西,然后过滤出来? – Eris

+0

任何将出现在这里的解决方案将在现场后迭代... –

+0

好的,这就是我想知道的。那么是不是没有迭代的内置增量法? (叹气)我可能不得不重新考虑这一切。 –

回答

5

解决方案1的联接:使用除了(如果该项目是可比)

var diffs = List1 
    .Join(List2, r2=>r2.ItemId, r1=>r1.ItemId, (r1,r2)=> new { r1, r2 }) 
    .Where(r=> r.r1.Quantity != l.r2.Quantity); 

解决方案2:

var diffs = List1.Except(List2); 

解决方案3使用MoreLinq

var diffs = List1.ExceptBy(List2, e=> new {e.ItemId, e.Quantity});