Я пытался преобразовать ниже вложенную группировку с использованием метода расширения GroupBy
.Вложенные группы Linq query vs Groupby extension method
var res = from th in teamHistories
group th by th.Date into grp1
from grp2 in
(from th in grp1 group th by th.Event)
group grp2 by grp1.Key;
Это возвращает IEnumerable<IGrouping<KeySelector, IGrouping<KeySelector, Object>>
; Который производит дерево, как структура -
FirstGroup -> Key(Date)
Elements - SecondGroup -> Key(Event)
Elements - (TeamHistory) ..
Но когда я пытался писать подобный запрос, используя метод расширения GroupBy, кажется, работает по-другому. Согласно подписи метода Groupby он возвращает IEnumerable<IGrouping<TKey, TSource>>
. Значит, если я попытаюсь сделать вложенность, он вернет IEnumerable<IEnumerable<IGrouping<KeySelector, Elements>>>
, который, конечно, произведет нежелательные результаты.
Вот что я пробовал:
var res1 = teamHistories.GroupBy(x => x.Date, (key, g1) =>
g1.Select(x => new { key, x })
.GroupBy(x => x.x.Event, g => g));
Вопрос -
Является ли это правильный способ сделать такой вложенности? Потому что результаты, которые я получаю, разные. Он возвращает
IEnumerable<IEnumerable<IGrouping<KeySelector, Elements>>>
вместоIEnumerable<KeySelector, IGrouping<KeySelector, IGrouping<KeySelector, Object>>>
.Существуют ли какие-либо ограничения при использовании методов расширения
GroupBy
по сравнению с предложениемGroup by
в запросе Linq?
Полный текст snippet Если кто-то хочет воспроизвести результат.
Он возвращает 'IEnumerable>>>'. Тип возвращаемого значения завершается дополнительным перечислением. Я должен был использовать дополнительный цикл для получения фактического результата. Знаете ли вы, как можно его избежать? –
vendettamit
@vendettamit, Я обновил свой запрос – octavioccl
Awesome !! Теперь я должен тщательно проанализировать, как вы его преобразовали. +1. – vendettamit