Mit LINQ, erhalten Sie Anzahl der Elemente, die den vorgegebenen Kriterien genügen in der Gruppierung
Werde ich Sie wahrscheinlich Metzger die Terminologie, wenn ich zu hart zu versuchen, also es wird einfacher sein, zu beschreiben, über code:
var fooGroup = fooList.GroupBy(x => x.SomeID);
//fooGroup is now of type IEnumerable<IGrouping<int, Foo>>
var someCount = fooGroup.Count(y => y.Where(f => f.Bar == "Bar"));
Den oben genannten werden nicht kompilieren, wegen dieser Fehlermeldung: "Cannot convert lambda-Ausdruck, der Delegaten-Typ System.Func<System.Linq.IGrouping<int,Foo>,bool>
da einige der Rückgabetypen im block nicht implizit konvertierbar delegate Rückgabetyp"
Ich nehme an, die Antwort ist ziemlich einfach, aber ich kann mich nicht umbrochen, mein Kopf herum, wie dies zu tun.
- Sie sollten erklären, auf einem hohen Niveau, was Sie versuchen zu erreichen. z.B., "ich will zählen, wie viele foos haben eine bestimmte ID." Es ist schwer zu sagen, was Sie zu tun versuchen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie zu tun versuchen, mit einer Gruppe von nicht machen eine ganze Menge Sinn. Ich schlage vor, die folgenden.
Wenn Sie schauen, für wie viele Elemente haben
Bar == "Bar"
, dann tun Sie es, bevor sich die Gruppe.Wenn Sie schauen, um zu Anzahl der Gruppen, die enthalten ein element, das entspricht den gleichen Kriterien.
Den
IEnumerable<IGrouping<int, Foo>>
erhalten Sie durch gruppieren.Es ist ein
IEnumerable
Gruppen. Die Gruppe hat eine wichtige Art derint
ist, da Sie gruppiert nach der int-id-Spalte. Die Gruppierung enthält eineIEnumerable
enthält die Liste der Objekte, die alle über diesen Schlüssel verfügen. Es ist der TypFoo
.Dann ist es eine einfache Abfrage. Aus der Gruppierung, die Sie finden, diejenigen, die wollten, Schlüssel (d.h. die int-id), und wählen Sie dann die Anzahl von den Gruppen
IEnumerable
..GroupBy(x->x.Key).ToDictionary(x => x.Key, x => x.Value)
, und wählen Sie aus, dass.Versuchen Sie dies:
Oder sogar mehr sauber