EF - Linq Expression и использование списка Ints для получения максимальной производительности - PullRequest
1 голос
/ 12 января 2012

Итак, у меня есть список (таблица) из примерно 100 тыс. Элементов, и я хочу получить все значения, которые соответствуют данному списку.

У меня есть что-то вроде этого.ключ Table Sections НЕ является первичным ключом, поэтому я ожидаю, что каждое значение в listOfKeys будет возвращать несколько строк.

List<int> listOfKeys = new List<int>(){1,3,44};
var allSections = Sections.Where(s => listOfKeys.Contains(s.id));

Я не знаю, будет ли это иметь значение, но обычно listOfKeys будеттолько от 1 до 3 элементов.

Я использую Entity Framework.

Итак, мой вопрос, это лучший / самый быстрый способ включить список в выражение linq?Я предполагаю, что не лучше использовать другой объект данных .NET ICollection.Должен ли я использовать Союз или что-то?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 января 2012

Предположим, что listOfKeys будет содержать только небольшое количество элементов и его локальный список (не из базы данных), например, <50, тогда все в порядке.Сгенерированный запрос будет в основном <code>WHERE id in (...) или WHERE id = ... OR id = ... ..., и это нормально для механизма базы данных, чтобы обработать его.

0 голосов
/ 12 января 2012

A Join, вероятно, будет более эффективным:

var allSections =
    from s in Sections
    join k in listOfKeys on s.id equals k
    select s;

Или, если вы предпочитаете синтаксис метода расширения:

var allSections = Sections.Join(listOfKeys, s => s.id, k => k, (s, k) => s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...