我需要一种方法来确定从DB中删除了哪些行,给出了感兴趣的ID列表。 类似的东西:
var idsOfInterest = new int[] {1,2,3,4};
idsOfInterest.Except(Datacontext.Table.Select(tbl=>tbl.ID)).Dump();
我该怎么做?什么是最佳的LINQ查询?
编辑:是否可以一步完成(单个数据库查询),而不查询现有的ID然后应用Except?
答案 0 :(得分:2)
你自己的代码会好起来的。但是,由于您从数据库中提取所有ID,因此可能存在性能问题,因此以下内容更有效。
var idsInDatabase =
from t in DataContext.Table
where idsOfInterest.Contains(t.ID)
select t.ID;
var idsDeletes = idsOfInterest.Except(idsInDatabase);
<强>更新强>
从您的更新中我了解到,您希望从数据库中检索所有丢失的ID,这很难做到,因为您需要数据库中不再存在的ID。
如果您尝试使用普通旧SQL执行此操作,则需要一个包含大量数字{0,1,2,3,...}的表来加入(因为您的{{1 }}不再包含所有ID)或者您将创建内部查询或表值函数)。这可能是这样的:
Table
据我所知,没有办法将这样的构造转换为LINQ to SQL。表值函数也是如此。
所以你可以做的就是加入你的SELECT x.id
FROM (
SELECT 1 as id
UNION ALL
SELECT 2
UNION ALL
SELECT 3
UNION ALL
SELECT 3) x
LEFT OUTER JOIN Table t ON x.id = t.ID
WHERE t.ID IS NULL
某种Table
表格,但我个人不会这样做,因为你只是过于复杂化了。
答案 1 :(得分:0)
怎么回事呢?
var idsOfInterest = new int[] {1,2,3,4 };
var table = new int[] {2,3};
var deletedIDs = from id in idsOfInterest
join t in table
on id equals t into gj
where !gj.Contains(id)
select id;