Linq to sql Linq2sql优化左联接以获取仅存在于1个容器中的项

Linq to sql Linq2sql优化左联接以获取仅存在于1个容器中的项,linq-to-sql,performance,left-join,Linq To Sql,Performance,Left Join,我想从一个容器中获取另一个容器中不存在的项目。一个容器是IEnumerable,另一个是DB中的实体。比如说 IEnumberable<int> ids = new List<int>(); ids.Add(1); ids.Add(2); ids.Add(3); using (MyObjectContext ctx = new MyObjectContext()) { var filtered_ids = ids.Except(from u in ctx.Users

我想从一个容器中获取另一个容器中不存在的项目。一个容器是IEnumerable,另一个是DB中的实体。比如说

IEnumberable<int> ids = new List<int>();
ids.Add(1);
ids.Add(2);
ids.Add(3);
using (MyObjectContext ctx = new MyObjectContext())
{
   var filtered_ids = ids.Except(from u in ctx.Users select u.id);
}
改进了底层查询,并在(…)中添加了
WHERE[id]
,这似乎是一种更好的方法

我有两个问题:

  • 是否有可能进一步提高此查询的性能

  • 据我记忆所及,中的
    中可以有多少个参数是有限制的。如果我超出了限制(这不太可能发生,但最好做好准备),我当前的查询是否有效

  • 只要有适当的索引/主键,该查询就可以了

  • sql server接受的sql参数上限约为2100。如果超出限制,将遇到sql异常而不是结果

  •  var filtered_ids = ids.Except(from u in ctx.Users
                        where ids.Contains(u.id) 
                         select u.id);