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!
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());
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());
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!
Pour tout groupe sélectionné, vous pouvez appeler
var selectedGroupValues=selectedGroup.SelectMany(x=>x);