Получить свойство "Значение" в IGrouping

У меня есть структура данных вроде

public DespatchGroup(DateTime despatchDate, List<Products> products);

И я пытаюсь сделать...

var list = new List<DespatchGroup>();

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate))
{
    // group.Values is not correct... how do I write this?
    list.Add(new DespatchGroup(group.Key, group.Values);
}

Я, очевидно, не понимаю IGrouping, поскольку не вижу, как реально попасть в записи данных внутри группы!

Ответ 1

Группа реализует IEnumerable<T> - В общем случае просто вызовите foreach по group. В этом случае, поскольку вам нужен List<T>:

list.Add(new DespatchGroup(group.Key, group.ToList());

Ответ 2

Нет свойства Values или подобного, потому что сама IGrouping<T> является последовательностью значений IEnumerable<T>. Все, что вам нужно сделать в этом случае, - это преобразовать эту последовательность в список:

list.Add(new DespatchGroup(group.Key, group.ToList());

Ответ 3

Просто связанный совет - поскольку, как говорили другие ответы, группировка является IEnumerable, если вам нужно получить доступ к определенному индексу, вы можете использовать group.ElementAt(i).

Это, вероятно, очевидно для многих людей, но, надеюсь, это поможет немногим!

Ответ 4

Для любой выбранной группы вы можете вызвать

var selectedGroupValues=selectedGroup.SelectMany(x=>x);