在两个列表中查找属性差异

Cas*_*ton 2 c# linq performance

假设我有两个列表.

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

但是,一个或多个属性(ID除外)可能已经改变.在这种情况下,两个数量发生了变化:

List1
---------
{
    ItemId: 1
    Quantity: 10
}
{
    ItemId: 2
    Quantity: 12
}
{
    ItemId: 3
    Quantity: 1
}
Run Code Online (Sandbox Code Playgroud)

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

List2
---------
{
    ItemId: 1
    Quantity: 10
}
{
    ItemId: 2
    Quantity: 3
}
{
    ItemId: 5
    Quantity: 1
}
Run Code Online (Sandbox Code Playgroud)

除了遍历每个属性并比较Quantity属性之外,有没有办法比较两个列表,找到发生更改的ID,然后仅对更改的项目调用Update方法?

换句话说,我只是想避免遍历每个列表.

Rob*_*Kee 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);
Run Code Online (Sandbox Code Playgroud)

解决方案2使用除(如果项目具有可比性):

var diffs = List1.Except(List2);
Run Code Online (Sandbox Code Playgroud)

解决方案3使用MoreLinq:

var diffs = List1.ExceptBy(List2, e=> new {e.ItemId, e.Quantity});
Run Code Online (Sandbox Code Playgroud)