Jörgen Andersson Ответов: 1

Получите самые Ранговые элементы для каждой группы в linq


Мне нужно выбрать элементы с самым высоким рангом по каждому атрибуту
У меня есть функциональный рейтинг в linq, который выглядит следующим образом:
MyCollection.GroupBy(c => c.Attribute).Select(g => g.OrderByDescending(c => c.Prio).First())
И это прекрасно работает, за исключением того, что когда я получаю связи в рейтинге, я получаю только один из связанных предметов.

Кто-нибудь знает, как получить все связанные элементы с наивысшим приоритетом?

Что я уже пробовал:

MyCollection.GroupBy(c => c.Attribute).Select(g => g.OrderByDescending(c => c.Prio).First())

1 Ответов

Рейтинг:
11

OriginalGriff

Вы не можете сделать это автоматически, потому что вы очень конкретно сказали ему возвращать только один элемент из каждой группы - это то, что делает First!
Попробовать это:

MyCollection.GroupBy(c => c.Attribute).SelectMany(g => g.Where(p => p.Prio == g.Max(h => h.Prio)))


Jörgen Andersson

О, я прекрасно знала, что это неправильно, просто не могла собраться с мыслями, чтобы все исправить.
Однако я тем временем решил ее, используя вложенный Groupby. Но ваше решение лучше, и так просто, как я думал, что это должно быть.

OriginalGriff

:смеяться:
Разве это не всегда так? Когда вы задаете вопрос, он решает сам себя...