检测已删除的记录LINQ Except - 不能使用本地序列

时间:2013-11-26 02:34:55

标签: linq ienumerable iqueryable

我有一个接收

的WCF服务
ObservableCollection<Pouch> colPouchDetails;

我正在尝试删除数据库中未包含在此ObservableCollection中的所有记录(基于ID列):

var deletedPouches = DB.Pouches.Except(colPouchDetails);

“抛出本地序列不能用于查询运算符的LINQ to SQL实现,但Contains()运算符除外”

如何在IQueryable或IEnumerable中获取colPouchDetails ID字段,以便我知道从原始列表中删除了什么?一旦我得到这个列表,我就可以循环删除数据库中的每条记录。

1 个答案:

答案 0 :(得分:1)

使用Select(d => d.ID)获取ID的集合,并在该集合上调用Contains,作为错误消息说明。

由于您需要colPouchDetails中没有相应元素的所有项目,因此您必须使用Contains否定运算符否定!方法结果。

var deletedPouches = DB.Pouches.Where(p => !colPouchDetails.Select(d => d.ID)
                                                           .Contains(p.ID))