Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] LINQ: .Where() auf IEnumerable<IGrouping<int,object>>
qde
myCSharp.de - Member



Dabei seit:
Beiträge: 36

Themenstarter:

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

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von qde am .
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

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
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von m0rius am .
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
qde
myCSharp.de - Member



Dabei seit:
Beiträge: 36

Themenstarter:

beantworten | zitieren | melden

Hallo m0rius,

Es gibt leider kein Key Property bei mir.

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

Viele Grüße
qde
private Nachricht | Beiträge des Benutzers
Cat
myCSharp.de - Member

Avatar #avatar-3070.jpg


Dabei seit:
Beiträge: 790

beantworten | zitieren | melden

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


var list = groupedlist.Where(q => q.Key == 10);
private Nachricht | Beiträge des Benutzers
qde
myCSharp.de - Member



Dabei seit:
Beiträge: 36

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
qde
myCSharp.de - Member



Dabei seit:
Beiträge: 36

Themenstarter:

beantworten | zitieren | melden

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);
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von qde am .
private Nachricht | Beiträge des Benutzers
Cat
myCSharp.de - Member

Avatar #avatar-3070.jpg


Dabei seit:
Beiträge: 790

beantworten | zitieren | melden

Das SelectMany(o => o) mal ausgenommen, was habe ich denn anderes geschrieben?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cat am .
private Nachricht | Beiträge des Benutzers