数据库中存在的列表中不存在的记录

时间:2014-09-14 17:07:07

标签: c# linq-to-entities

我在数据库表礼物中有记录,例如:

Id: 1, Name: A
Id: 2, Name: B
Id: 3, Name: C

IEnumerable<Gift> gifts中,我在修改后有来自用户的元素,例如:

Id: 1, Name: A_update
Id: 3, Name: C_update
Id: 0, Name: D_new

现在我想要数据库中存在的列表中不存在的记录 - 所以在这个例子中它应该是一条记录:

Id: 2, Name: B

我怎么能这样做,因为下面的代码不起作用:

List<Gifts> result = db.Gifts.Where(x => !gifts.Select(y => y.Id).Contains(x.Id)).ToList();
  

无法创建“MyProject.Models.Gift”类型的常量值。   此处仅支持原始类型或枚举类型   上下文。

1 个答案:

答案 0 :(得分:2)

这是实体框架的限制。仅支持在表达式中使用某些特定数据类型。

如果您使用Entity Framework 4.0或更高版本,则可以使用此解决方法:

int[] giftIds = gifts.Select(y => y.Id);
List<Gifts> result = db.Gifts.Where(x => !giftIds.Contains(x.Id)).ToList();