Как отфильтровать результаты из таблицы ассоциации, которая связана только с одной другой таблицей? - PullRequest
1 голос
/ 03 марта 2012

Так что я не могу понять, как правильно построить мой EF-запрос, чтобы получить нужные мне строки.Я работаю только с двумя таблицами.

Дизайнер Entity Framework создает эту диаграмму edmx для моей структуры БД.Цикл в верхней части представляет таблицу ассоциаций, которые у меня возникают проблемы при фильтрации.

efgeoboundary

Диаграмма базы данных SQL 2005 выглядит следующим образом.Таблица GeoBoundaryAssociation имеет отношение «многие ко многим», начиная с двух только двух столбцов и заканчивая первичным ключом таблицы GeoBoundary GeoID.

enter image description here

Я могу написать запрос SQL, чтобы получитьстроки я хочу довольно легко.Мне нужно только передать одну переменную, чтобы получить мои результаты.

select g.geoid, g.name
from geoboundaryassociation a
    inner join geoboundary g on g.geoid = a.geoidto
where a.geoidfrom = 29

Когда я пытаюсь написать свой EF-запрос, я не могу отфильтровать строки ни в одном из двух столбцов таблицы Association.Любая помощь будет принята с благодарностью.

В качестве кратковременного исправления я добавил столбец ID в таблицу GeoBoundaryAssociation, чтобы EF сгенерировал сущность, чтобы я мог фильтровать ее напрямую.Но я уверен, что должен быть лучший способ сделать это.

1 Ответ

2 голосов
/ 03 марта 2012

Попробуйте:

var query = context.GeoBoundaries
                   // Try either g.GeoBoundaries or g.GeoBoundary1
                   .Where(g => g.GeoBoundaries.Any(a => a.GeoID == 29);
                   .Select(g => new { g.GoeID, g.Name });
...