Получить свойство «Значение» в IGrouping - PullRequest
114 голосов
/ 26 января 2011

У меня есть структура данных типа

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, поскольку я не могуПосмотрите, как на самом деле добраться до записей данных в группе!

Ответы [ 4 ]

141 голосов
/ 26 января 2011

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

list.Add(new DespatchGroup(group.Key, group.ToList());
28 голосов
/ 26 января 2011

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

list.Add(new DespatchGroup(group.Key, group.ToList());
17 голосов
/ 22 октября 2012

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

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

11 голосов
/ 30 ноября 2015

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

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