GROUP BY с агрегирующими функциями на LINQ
Как делать GROUP BY с агрегирующими функциями на LINQ, используя method syntax? Например, есть такая таблица
CREATE TABLE product
(
product_code NVARCHAR(40) NOT NULL,
partner_id INT NOT NULL,
version INT NOT NULL,
...
PRIMARY KEY (product_code, partner_id, version),
...
);
На SQL запрос выглядит так
SELECT product_code, partner_id, MAX(version) AS maxversion
FROM product GROUP BY product_code, partner_id
Как сделать аналогичный запрос на LINQ? Т.е. есть класс Product с такими же полями и есть IEnumerable<Product>, так вот как из него получить аналогичные данные?
Enumerable.GroupBy возвращает какой-то IEnumerable<IGrouping<TKey, TSource>>, с которым непонятно что делать.
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Попробуйте как нибудь так
var maxVertionedProduct = from pr in context.Products
group pr by pr.code, pr.partnerId into grpr
select new
{
code = grpr.code,
partnerId = grpr.code,
maxversion = grpr.Max(x => x.version)
};
Автор решения: havon
→ Ссылка
Вот так
Products.GroupBy(x => new { x.ProductCode, x.PartnerId })
.Select(g => new { ProductCode = g.Key.ProductCode, PartnerId = g.Key.PartnerId, MaxVersion = g.Max(x => x.Version) })