我们说我有两个名单。
我们知道列表中的项目数是相同的,并且该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
}
除了遍历每个属性并比较Quantity属性之外,有没有办法比较两个列表,找到发生更改的ID,然后仅对更改的项目调用Update方法?
换句话说,我只是想避免遍历每个列表。
答案 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使用except(如果项目具有可比性):
var diffs = List1.Except(List2);
解决方案3使用MoreLinq:
var diffs = List1.ExceptBy(List2, e=> new {e.ItemId, e.Quantity});