2013-09-11 2 views
1

Как объединить groupBy и max? Я хочу сгруппировать по имени и получить только последнюю версию. Что-то вроде этогоSystem.linq - GroupBy и Max

Docs.GroupBy(x => x.Name).Max(x => x.VersionNumber) 

Возможно ли это?

следующего

searchResult.Docs.GroupBy(x => x.PackageName).Select(x => x.Max(x => x.VersionNumber)); 

она возвращает

IEnumerable<int> 

и не

IEnumerable<Doc> 

ответ

1

Заказать каждую группу по номеру версии и выберите только первый документ (он будет иметь максимальный номер версии) :

Docs.GroupBy(x => x.Name) 
    .Select(g => g.OrderByDescending(x => x.VersionNumber).First()) 

Ваш код не работает, потому что вы выбираете значение максимального номера версии (которое является int) вместо выбора документа с максимальным номером версии.

0

Вы можете заказать его descinding и получить первый элемент результата, для образца:

searchResult.Docs.GroupBy(x => x.PackageName).OrderByDescending(x => x.Max(x => x.VersionNumber)).FirstOrDefault(); 
0

Для того, чтобы получить последний элемент группы запроса является:

.GroupBy(x=>x.Name).Select(y=>y.OrderbyDescending(z=>z.Version).FirstorDefault()); 
Смежные вопросы