Mit LINQ erhalten Sie die Anzahl der Elemente, die Kriterien in der Gruppierung erfüllen

8

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 "

" konvertiert werden können

Ich gehe davon aus, dass die Antwort ziemlich einfach ist, aber ich kann mir nicht vorstellen, wie ich das machen soll.

    
Matt 13.02.2013, 23:16
quelle

3 Antworten

9

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.

%Vor%

Wenn Sie die Gruppen zählen möchten, die ein Element enthalten, das denselben Kriterien entspricht.

%Vor%     
Khan 13.02.2013, 23:29
quelle
4

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.

%Vor%     
h.alex 13.02.2013 23:20
quelle
0

Versuchen Sie Folgendes:

%Vor%

Oder noch sauberer

%Vor%     
Jens Kloster 13.02.2013 23:25
quelle

Tags und Links