Entity Framework выбор многих ко многим - PullRequest
0 голосов
/ 10 ноября 2011

Модель содержит 2 объекта с отношением "многие ко многим": CatalogueItems и Keywords .

Предположим, что определены 2 переменные:

ObjectQuery<Keyword> KW;
ObjectQuery<CatalogueItem> CI;

KW содержит некоторый запрос для выбора набора ключевых слов.Мне нужно получить CI , который выбирает все CatalogueItem, имеющие хотя бы одно ключевое слово из KW .

Важная вещь: ничего не должно быть предварительно вычислено или перечислено.Перечисление ключевых слов занимает много времени, но пользовательский интерфейс основан на отображении элементов CatalogueItem.Идеально было бы подготовить CI к исполнению.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011
context.CatalogueItems.Where(ci=> ci.Keywords.Where(cik=>KW.Any(cik)));

Что-то в этом роде?Пожалуйста, проверьте синтаксис.

0 голосов
/ 10 ноября 2011

Примерно так:

from catalogueItem in CI
from keyword in KW
where catalogueItem.Keywords.Contains(keyword)
select catalogueItem

РЕДАКТИРОВАТЬ: чтобы KW не рассчитывался каждый раз, попробуйте сделать это:

var keywords = KW.ToList()
from catalogueItem in CI
from keyword in keywords
where catalogueItem.Keywords.Contains(keyword)
select catalogueItem

В противном случае мне нужно будет увидетьзапрос в KW и всей вашей базе данных, чтобы узнать, как оптимизировать запрос.

Другой вариант - просто написать хранимую процедуру и сопоставить ее с Entity Framework.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...