У меня есть эта схема:
Products (**ProductId**, OwnerId, Name)
Categories (**CategoryId**, Name)
ProductsInCategories( **ProductId**, CategoryId )
Когда я хочу вернуть список категорий, Linq достаточно прост:
from c in db.Categories
orderby c.Name
select c;
Однако я хочу вернуть только наборкатегорий, которые содержат продукты с определенным OwnerId.
Если бы это был обычный T-SQL, то я мог бы сделать это достаточно легко:
SELECT ProductsInCategories.CategoryId
FROM ProductsInCategories
INNER JOIN Categories ON ProductsInCategories.CategoryId = ProductsInCategories.CategoryId
INNER JOIN Products ON ProductsInCategories.ProductId = Products.ProductId
WHERE Products.OwnerId = 3
GROUP BY ProductsInCategories.CategoryId
(Но я отмечаю, что этот SQL возвращает только идентификаторы категорийно не имена категорий, в идеале я хотел бы вернуть оба)
Однако, когда я конвертирую это в Linq, он больше не работает:
from pic in db.ProductsInCategories
join p in db.Products on pic.ProductId equals p.ProductId
join c in db.Categories on pic.CategoryId equals c.CategoryId
orderby c.Name
where p.OwnerId == ownerId
select c;
LinqPad сообщает, что это возвращаетбольшой набор результатов, который содержит множество повторяющихся записей (имена категорий повторяются для каждого сопоставления продукта в категории).
Какое здесь решение?
Спасибо!