Laden...

[erledigt] LINQ: .Where() auf IEnumerable<IGrouping<int,object>>

Erstellt von qde vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.135 Views
Q
qde Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren
[erledigt] LINQ: .Where() auf IEnumerable<IGrouping<int,object>>

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?

1.002 Beiträge seit 2007
vor 12 Jahren

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

Q
qde Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

Hallo m0rius,

Es gibt leider kein Key Property bei mir.

So sieht mein Objekt aus: IEnumerable<IGrouping<int, MyObject>> groupedlist

Viele Grüße
qde

771 Beiträge seit 2009
vor 12 Jahren

Die Key-Eigenschaft entspricht ja der Id deiner eigenen Klasse, also


var list = groupedlist.Where(q => q.Key == 10);

Q
qde Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

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.

Q
qde Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

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);
771 Beiträge seit 2009
vor 12 Jahren

Das SelectMany(o => o) mal ausgenommen, was habe ich denn anderes geschrieben? 🤔