EF4 - Отношение ко многим ко многим, запрос с содержанием и списком <int> - PullRequest
2 голосов
/ 21 февраля 2011

У меня есть приложение asp.net C #, использующее EF4 для подключения к базе данных SQL Server.

В базе данных между двумя таблицами, Officer и Geography, у меня есть отношение "многие ко многим", поэтому существует еще одна таблица с именем OfficerGeography, которая связывает эти две таблицы.

С помощью этой базы данных, используемой для создания диаграммы edmx, EF4 правильно видит соотношение между многими этими двумя таблицами.

Проблема
У меня есть List<int> geographyIds, которые соответствуют первичному ключу таблицы Geography.

Я хочу использовать этот список для получения офицеров с географическим идентификатором, которые появляются в этом списке. Я думал, что следующий LINQ будет работать:

var geographyIds = new List<int>() { 1, 2, 3, 4, 5 };
var officers = db.Officers.Where(o => o.Enabled == true && geographyIds.Contains(o.Geographies.GeographyId));

Однако это не удалось. На самом деле intellisense не будет перечислять какие-либо столбцы для o.Geographies (из-за связи многих со многими). ​​

Как я могу получить список офицеров, у которых есть совпадение с GeographyId?

Дополнительные уточнения
Таблица базы данных OfficerGeography не отображается как собственная сущность в EF4. EF4 правильно видит только Officer и Geography со свойством навигации от одного к другому на обоих объектах.

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

Как насчет

var officers = db.Officers
    .Where(o => o.Enabled == true 
        && o.Geographies.Any(g => geographyIds.Contains(g.Id)));

geographyIds.Contains () принимает один int в качестве параметра, но у каждого сотрудника может быть несколько географических регионов, поэтому метод any-используется для их проверки по одному.

0 голосов
/ 21 февраля 2011

Была ли EF отображать таблицу соединений как отношение или она включена как сущность?

Если она была включена как сущность, вам может понадобиться

o.OfficerGeographies.GeographyId

Thisне весь ответ, хотя.Если таблица OfficerGeographies сопоставлена ​​с сущностью в вашем edmx, вы должны удалить ее и добавить отношение / связь между вашими таблицами Officer и Geography и сопоставить это отношение с таблицей соединения.

...