Linq除了特定领域的比较

时间:2014-06-20 08:25:59

标签: linq asp.net-mvc-3

我的数据库中有List<Item> A,我从外面得到List<Item> B。我想得到 列表A和B具有相同的属性。

List<Item> A

{ ID : 1, Name: "Tool A" , Status : 1, Price : 100 }
{ ID : 2, Name: "Tool B" , Status : 2, Price : 200 }
{ ID : 3, Name: "Tool C" , Status : 3, Price : 300 }
{ ID : 4, Name: "Tool D" , Status : 4, Price : 400 }
{ ID : 5, Name: "Tool E" , Status : 5, Price : 500 }

List<Item> B

{ ID : 1, Name: null , Status : 1, Price : 100 }
{ ID : 2, Name: null , Status : 2, Price : 200 }
{ ID : 3, Name: null , Status : 3000, Price : 300 }
{ ID : 4, Name: null , Status : 4, Price : 40000 }
{ ID : 5, Name: null , Status : 5, Price : 500 }

我想将更新的数据存储到数据库中,这将是

{ ID : 3, Name: "Tool C", Status : 3000, Price : 300 }
{ ID : 4, Name: "Tool D", Status : 4, Price : 40000 }

属性“名称”的值来自List<Item> A,即使它们在List<Item> B中为空

我在想这样的事情,但它给了我一个奇怪的结果

var ChagnedList = A.AsEnumerable()
   .Where(aa => B.Any(bb => aa.Status != bb.Status || aa.Price != bb.Price))

1 个答案:

答案 0 :(得分:0)

您可以在MoreLinq中使用ExceptBy方法:

var ChagnedList = A.AsEnumerable()
                   .ExceptBy(B, item => new {item.Status,item.Price});