我已经看到了这些 StackOverflow 答案,但是当过滤列表在内存中时,它们不会产生相同的结果。
我有一个 ID 列表。我想删除数据库中存在的任何 ID,以便留下需要添加的 ID 列表。换句话说,我需要where not in
使用 Linq-To-Entities 执行 SQL 查询。问题是,这些方法不是产生那个 SQL,而是每个列表项产生一个 SQL 查询。
var providerIds = new [] {"1130", "1", "16"};
方法一:
var missingProviders = (from provider in providerIds
where !JobProviders.Any(p => p.JobProviderID == provider)
select provider).ToList();
方法二:
var missingProviders = (from provider in providerIds
where !(from p in JobProviders select p.JobProviderID).Contains(provider)
select provider).ToList();
有没有办法构造 LINQ 查询以使其产生预期的not in
形式,或者这些是唯一的解决方案吗?