Выберите много строк из хранилища данных, используя Linq to Entities - PullRequest
0 голосов
/ 15 июля 2011

Нам нужно принять коллекцию значений ключей из пользовательского ввода.Затем необходимо выполнить запрос в хранилище данных L2E, которое должно выбрать все строки, ключи которых включены в коллекцию.Лучшее, что у меня есть, это:

var lines = dataStore.Entities.ToList(); /* To List to force a query */
var selectedLines = lines.Where(line=> inputValues.Contains(line.key)).Distinct();

Однако, это кажется расточительным, поскольку мы тянем все хранилище данных, чтобы выбрать (вероятно) только небольшое количество строк.Будет ли менее затратным выполнять отдельный запрос, соответствующий каждому значению ключа (столбец проиндексирован), или есть лучший способ с синтаксисом Linq, который я пропустил?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

EF4 имеет поддержку contains, так что вы можете просто использовать его напрямую.

var selectedLines = dataStore.Entities
                             .Where(line=> inputValues.Contains(line.key))
                             .Distinct();

Возможные обходные пути в более ранних версиях см. в этом вопросе .

0 голосов
/ 15 июля 2011

У вас должно быть содержимое в вашем первом запросе.
Затем он будет возвращать только те значения, которые указал пользователь.
Я также рекомендую вам взглянуть на LinqPad очень хороший инструмент, и он показывает, какие запросы создаются Linq для сущностей.

var lines = (from p in dataStore.Entities
            where inputValues.Contains(p.key)
            select p).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...