Hi,
ich habe via Linq2Object mittels groupby
eine Liste von Objekten gruppiert. Zurück bekomme ich ein IEnumerable<IGrouping<int, MyObj>>
Ich kann dann mit foreach jede Gruppe durchgehen und innerhalb der Gruppe auf die zugewiesenen Elemente zugreifen.
Allerdings möchte ich ein Query schreiben, das mir den kompletten Inhalt einer Gruppe gibt.
var list = groupedlist.Where(q => q.Id == 10);
Mir ist schon klar, dass ich auf das Property "Id" nicht zugreifen kann, da ich nicht auf die Liste, sondern auf das Groupingobjekt zugreife. Wie komme ich über Linq an meine Objekte, wenn ich nicht mit foreach
jede Gruppe durchgucken möchte?
Hallo qde,
über die IGrouping.Key-Eigenschaft gelangst du an die Id
, nach der du gruppierst:
var list = groupedlist.Where(q => q.Key == 10);
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo m0rius,
Es gibt leider kein Key Property bei mir.
So sieht mein Objekt aus: IEnumerable<IGrouping<int, MyObject>> groupedlist
Viele Grüße
qde
Die Key-Eigenschaft entspricht ja der Id deiner eigenen Klasse, also
var list = groupedlist.Where(q => q.Key == 10);
Hi Cat,
nein das geht trotzdem nicht.
sagen wir mal das property meines objekts heißt myId
list.Where(q => q.myId == 1) //<-- myId gibt es nicht
list.Where(q => q.Key.myId == 1) //<-- key ist vom typ igrouping<int, Myobject> myId wird daher nicht angeboten. selektieren lässt es sich darauf allerdings nicht.
list.Where(q => q.ElementAt(10).myId); //<-- funktioniert. ich kann auf das 10. Element zugreifen und komme an ein objekt ran.
im debugmodus sehe ich, dass meine elemente unter "elements" liegen. darauf kann ich allerdings nicht zugreifen.
Ha ich habs rausgefunden. Key ist die ID, die ich auf die Gruppierung angewendet habe. SO funktionierts:
groupedlist.Where(q => q.Key == 10).SelectMany(o => o);
Das SelectMany(o => o) mal ausgenommen, was habe ich denn anderes geschrieben? 🤔