Ich habe eine Datenstruktur wie
public DespatchGroup(DateTime despatchDate, List<Products> products);
Und ich versuche zu tun ...
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);
}
Ich verstehe das offensichtlich nicht, IGrouping
da ich nicht sehen kann , wie ich tatsächlich zu den Datensätzen innerhalb der Gruppe komme!
c#
linq
data-structures
igrouping
Angst vor einem Hackplaneten
quelle
quelle
Antworten:
Die Gruppe implementiert
IEnumerable<T>
- Rufen Sie im allgemeinen Fall einfachforeach
diegroup
. In diesem Fall benötigen Sie einList<T>
:quelle
value
ist dies vergleichbar damit, dassToList()
nur ein größerer Aufwand besteht, um sie in eine Liste umzuwandeln,Values
Immobilie gäbe, wie sie es sich vorgestellt hatten, müssten sie es tungroup.Values.ToList()
. Umgekehrtnew DespatchGroup(group.Key, group)
würde es funktionieren, wenn sie eine Aufzählung anstelle einer Liste akzeptieren würden. Der Overhead ergibt sich aus der Definition vonDespachGroup
nicht aus der Funktionsweise von IGrouping.Es gibt keine
Values
Eigenschaft oder ähnliches , weil dieIGrouping<T>
selbst ist dieIEnumerable<T>
Folge von Werten. In diesem Fall müssen Sie diese Sequenz lediglich in eine Liste konvertieren:quelle
group.AsEnumerable()
.Für jede ausgewählte Gruppe können Sie anrufen
quelle
.Select
bei einer erneuten IGrouping <>.SelectMany
wird eine IEnumerable vom Typ der gruppierten Werte zurückgegeben, nach der ich gesucht habe.IEnumerable<IGrouping<key,DespatchGroup>>
). Andernfalls verwenden Sie estoList()
oder werfen Sie es einfach aufIEnumerable<DespatchGroup>
.Nur ein verwandter Tipp - da die Gruppierung, wie die anderen Antworten bereits sagten, eine IE-Zahl ist, wenn Sie auf einen bestimmten Index zugreifen müssen, den Sie verwenden können
group.ElementAt(i)
.Dies ist wahrscheinlich für viele Menschen offensichtlich, aber hoffentlich hilft es einigen!
quelle