Ich werde wahrscheinlich die Terminologie abschlachten, wenn ich zu viel versuche, also ist es einfacher, über Code zu beschreiben:
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"));
Das obige wird aufgrund dieses Fehlers nicht kompiliert: "Kann Lambda-Ausdruck nicht in Delegattyp konvertieren System.Func<System.Linq.IGrouping<int,Foo>,bool>
weil einige der Rückgabetypen im Block nicht implizit in den Delegate-Rückgabetyp "
Ich gehe davon aus, dass die Antwort ziemlich einfach ist, aber ich kann mir nicht vorstellen, wie ich das machen soll.
Was Sie mit einer Gruppe machen wollen, macht nicht viel Sinn. Ich schlage folgendes vor:
Wenn Sie suchen, wie viele Elemente Bar == "Bar"
haben, dann tun Sie es vor der Gruppe.
Wenn Sie die Gruppen zählen möchten, die ein Element enthalten, das denselben Kriterien entspricht.
%Vor% Die IEnumerable<IGrouping<int, Foo>>
erhalten Sie durch Gruppierung.
Es ist ein IEnumerable
der Gruppen. Die Gruppe hat den Schlüsseltyp int
. Dies liegt daran, dass Sie nach der ID-Spalte gruppiert sind. Die Gruppierung enthält ein IEnumerable
, das die Liste der Objekte enthält, die alle diesen Schlüssel haben. Es ist vom Typ Foo
.
Dann ist es eine einfache Abfrage. Aus der Gruppierung finden Sie diejenigen, die den gewünschten Schlüssel haben (d. H. Die int-ID) und dann die Anzahl aus den Gruppen IEnumerable
auswählen.