首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq2sql优化左联接以获取仅存在于一个容器中的项

Linq2sql优化左联接以获取仅存在于一个容器中的项
EN

Stack Overflow用户
提问于 2010-11-04 14:43:50
回答 1查看 105关注 0票数 0

我想从一个容器中获取不存在于另一个容器中的物品。一个容器是IEnumerable,另一个是DB中的实体。例如

代码语言:javascript
复制
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);
}

这种方法可以工作,但我意识到底层的sql类似于SELECT id FROM [Users]。这不是我想要的。改到

代码语言:javascript
复制
 var filtered_ids = ids.Except(from u in ctx.Users
                    where ids.Contains(u.id) 
                     select u.id);

改进底层查询并添加WHERE [id] IN (...),这似乎是一种更好的方法。

我有两个问题:

  1. 是否有可能进一步提高这个查询的性能?据我所知,
  2. IN中有一个限制参数。如果我超过了限制(这不太可能发生,但最好做好准备),我的当前查询是否有效?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-04 19:10:31

  1. 这个查询应该是很好的,只要有适当的索引/主键。
  2. sql服务器接受的sql参数的上限在2100左右。如果超出限制,将遇到sql异常,而不是结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4097805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档