开发者

Linq2sql Optimizing Left join to get items that exist in only in 1 container

I want to get items from one container that don't exist in another. One container is IEnumerable, and another is an entity in DB. For example

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);
}

This approach works, but I realized that underlying sql is something like SELECT id FROM [Users]. That is not what I want. Changing it to

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

improves underlying query and adds WHERE [id] IN (...) which seems a way better.

I have 2 questions:

  1. Is it possible to improve perfor开发者_C百科mance any further for this query?

  2. As far as I remember there is a limit on how many parameters can be in IN . Will my current query work if I exceed the limit (which is not very likely to happen, but it's better to be prepare) ?


  1. That query should be fine, provided proper indexes/primary keys are in place.

  2. The upper limit on sql parameters accepted by sql server is around 2100. If you exceed the limit, you will be met with a sql exception instead of results.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜