Преобразование ms sql "group by" запроса в linq в sql
У меня есть две таблицы, продукты и категории. Как я могу преобразовать следующий SQL-запрос в формат Linq?
select c.Name, c.DisplayName, count(p.id) from categories as c
LEFT join products as p on p.categoryId = c.id
group by c.Name, c.DisplayName
в некоторых категориях будет 0 товаров, так что ЛЕВНОЕ СОЕДИНЕНИЕ важно
3 ответа
Решение
Если вы правильно определите отношения в своей модели, то таблица клиентов должна быть связана со всеми продуктами, чтобы вы могли получить доступ к продуктам, связанным с клиентом, просто используя "c.Products". Тогда должна быть возможность написать что-то вроде этого:
var q =
from c in categories
select new { c.Name, c.DisplayName, Count = c.Products.Count() }
Т.
dc.categories
.Select(c => new
{
Name = c.Name,
DisplayName = c.DisplayName,
TheCount = c.Products.Count()
}
Если вы хотите сделать левое соединение в других случаях, проверьте "групповое соединение".
dc.categories
.GroupJoin(dc.products,
c => c.id,
p => p.categoryid,
(c, g) => new { Name = c.Name, TheCount = g.Count() }
);
Показать группировку на основе.
var q = from c in db.categories
group c by new {c.Name , c.DisplayName} into alias
select new { alias.Name,
alias.DisplayName,
Count = alias.Count(p => p.id)
}