Я хочу получить предметы из одного контейнера, которых нет в другом. Один контейнер IEnumerable, а другой объект в БД. Например
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]
Это не то, что я хочу. Меняя его на
var filtered_ids = ids.Except(from u in ctx.Users
where ids.Contains(u.id)
select u.id);
улучшает базовый запрос и добавляет WHERE [id] IN (...)
, что выглядит намного лучше.
У меня есть 2 вопроса:
Можно ли еще улучшить производительность для этого запроса?
Насколько я помню, существует ограничение на количество параметров в IN
. Сработает ли мой текущий запрос, если я превыслю предел (что вряд ли произойдет, но лучше подготовиться)?