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) })
→ Ссылка