web-dev-qa-db-fra.com

Obtenir la propriété "Valeur" dans IGrouping

J'ai une structure de données comme

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

Et j'essaie de faire ...

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);
}

Je ne comprends évidemment pas IGrouping car je ne vois pas comment accéder aux enregistrements de données au sein du groupe!

117
fearofawhackplanet

Le groupe implémente IEnumerable<T> - Dans le cas général, il suffit d'appeler foreach par-dessus le group. Dans this cas, car vous avez besoin d'un List<T>:

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

Il n'y a pas de propriété Values ou similaire car le IGrouping<T> lui-même est le IEnumerable<T> séquence de valeurs. Dans ce cas, tout ce que vous avez à faire est de convertir cette séquence en une liste:

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

Juste un conseil connexe - puisque, comme l’ont dit les autres réponses, le regroupement est un IEnumerable. Si vous devez accéder à un index spécifique, vous pouvez utiliser group.ElementAt(i).

Cela est probablement évident pour beaucoup de gens, mais j'espère que cela en aidera quelques-uns!

17
Rob H

Pour tout groupe sélectionné, vous pouvez appeler

var selectedGroupValues=selectedGroup.SelectMany(x=>x);
12
Bassl Kokash