使用LINQ比较C#中的两个列表并向实体类添加缺少的项的最简单方法

使用LINQ比较C#中的两个列表并向实体类添加缺少的项的最简单方法,c#,asp.net,asp.net-mvc,linq,compare,C#,Asp.net,Asp.net Mvc,Linq,Compare,我的C#应用程序中有两个列表,如下(名称): TransactionDetails类型的prepard列表包含我需要添加到DBList中的缺失项 例如,如果我在准备好的列表中有以下项目: TransactionID 1 2 3 4 5 6 7 8 9 我的数据库列表有: TransactionID 1 2 3 4 5 6 我想比较这两个列表,找到不在DBList中的匹配TransactionID,然后将它们添加到DBList中。之后,我将清除准备好的列表并将更改保存在DB中 这就是我目前

我的C#应用程序中有两个列表,如下(名称):

TransactionDetails类型的prepard列表包含我需要添加到DBList中的缺失项

例如,如果我在准备好的列表中有以下项目:

TransactionID

1
2
3
4
5
6
7
8
9
我的数据库列表有:

TransactionID 
1
2
3
4
5
6
我想比较这两个列表,找到不在DBList中的匹配TransactionID,然后将它们添加到DBList中。之后,我将清除准备好的列表并将更改保存在DB中

这就是我目前所做的:

var newList = prepared.Intersect(DBList).ToList();
prepared.Clear();
ctx.EbayUserTransactions.AddRange(newList);
ctx.SaveChanges();
但是由于某些原因,newList列表总是空的。。我怎样才能正确地做到这一点

编辑时,DBList项的输出将为:

  TransactionID

    1
    2
    3
    4
    5
    6
    7
    8
    9
您可以使用LINQ:

DBList.AddRange(prepared.Where((i) => DBList.FindIndex((el) => el.Transaction.ID == i.TransactionID) == -1));

哇,比我想象的简单多了。等等,我试试这个!:)它给了我这样一个例外:无法创建“DB_Layer.EbayUserTransactions”类型的常量值。此上下文中只支持基元类型或枚举类型。它告诉我没有FindIndex方法?@User987,您的列表类型是
List
?啊,因为DBList是DBSet类型,我只是将其放入列表中,如:.ToList().FindIndex()您是否尝试过
准备好。除了(DBList).ToList()
?DBList是否实现IEnumerable?@MatteoMarciano MSCP是,但Except方法如何知道要在两个列表中比较哪个属性。。。我正在比较它们的属性是TransactionId,对于类的形状没有太多线索
DBList.AddRange(prepared.Where((i) => DBList.FindIndex((el) => el.Transaction.ID == i.TransactionID) == -1));