LINQ-запросы с таблицами многие-ко-многим в Entity Data Model - PullRequest
0 голосов
/ 21 июля 2010

Я пытаюсь использовать LINQ для запроса следующей модели данных сущностей alt text
на основе этой модели БД alt text

Я бы хотел получить список продуктов на основе ProductFacets.FacetTypeId.

Обычно я использовал бы объединения, и это не было бы проблемой, но я не совсем понимаю, как запрашивать таблицы «многие ко многим» в Entity DataModel.

Это пример SQL-запроса:

select p.Name, pf.FacetTypeId from Products p
inner join ProductFacets pf on p.ProductId = pf.ProductId   
where pf.FacetTypeId in(8, 12)

Ответы [ 2 ]

1 голос
/ 21 июля 2010

В EF (при условии, что отображение выполнено правильно), объединения почти никогда не используются; вместо этого используются свойства навигации.

Ваш исходный SQL возвращает кортеж с повторяющимися записями имени. С LINQ это часто проще "сформировать" запросы в результаты, не являющиеся кортежами.

Следующее должно быть таким же, как SQL, только вместо того, чтобы возвращать (Name, FacetTypeId) пары с повторяющимися Именами, он вернет тип, имеющий Имя и последовательность FacetTypeIds:

var facetIds = new [] { 8, 12 };
var result = from p in db.Products
             select new
             {
                p.Name,
                FacetTypeIds = from pf in p.FacetTypes
                               where pf.FacetTypeId == 8 || pf.FacetTypeId == 12
                               select pf.FacetTypeId,
             };
1 голос
/ 21 июля 2010

Предполагаемый EF 4:

var facetIds = new [] { 8, 12 };
var q = from p in Context.Products
        where p.FacetTypes.Any(f => facetIds.Contains(f.FacetTypeId))
        select p;
...