LINQ to SQL, где ID отсутствует в some_list - PullRequest
6 голосов
/ 27 сентября 2010

Я пытаюсь сделать оператор LINQ to SQL, который фильтрует результаты, где идентификатор равен , а не в некотором списке целых чисел.Я понимаю, что метод .contains () нельзя использовать в Linq to SQL, но для объяснения того, что я хотел бы сделать, вот что я хотел бы сделать:

nextInvention = (from inv in iContext.Inventions
                    where !historyList.Contains(inv.Id)
                    orderby inv.DateSubmitted ascending
                    select inv).First<Invention>();

Любая идея, какЯ мог бы пойти на это?

Спасибо!

1 Ответ

18 голосов
/ 27 сентября 2010

Contains можно использовать в LINQ to SQL ... это обычный способ выполнения запросов IN. Я смутно помню, что есть некоторые ограничения, но это определенно может сработать. Ограничения могут касаться задействованных типов ... historyList a List<T>? Вероятно, он не поддерживается для произвольных IEnumerable<T>, например.

Теперь я не знаю, работает ли инвертирование результата, чтобы получить запрос «НЕ В», но по крайней мере это стоит попробовать. Вы пробовали точный запрос из вашего вопроса?

Одно замечание: я думаю, что удобочитаемость вашего запроса улучшится, если вы попытаетесь сохранить одно предложение на строку:

var nextInvention = (from inv in iContext.Inventions 
                     where !historyList.Contains(inv.Id)
                     orderby inv.DateSubmitted ascending
                     select inv)
                    .First();

Также обратите внимание, что в этом случае синтаксис метода, возможно, проще:

var nextInvention = iContext.Inventions
                            .Where(inv => !historyList.Contains(inv.Id))
                            .OrderBy(inv => inv.DateSubmitted)
                            .First();
...