2016-06-14 9 views
1

wie der Titel, sagte ich zu einer Gruppe nach Alter und Geschlecht, aber ich bekomme diese Fehlermeldung:Wie gruppiere ich nach Alter und Geschlecht mit IComparable?

Mindestens ein Objekt muss IComparable implementieren

var ageStats = vModel 
       .GroupBy(l => new { Age = 10 * (l.Age/10), l.GenderName }) 
       .OrderBy(x => x.Key) 
       .Select(g => new 
          { 
           Name = g.Key, 
           Count = g.Select(l => l.Age).Count() 
          }) 
       .ToList(); 

Wenn ich Gruppe nach Alter nur wie dass es funktioniert .GroupBy(l => 10 * (l.Age/10)) aber ich werde nicht das Geschlecht haben.

+0

Was ist die Art von 'Gend erName'? – Servy

+0

Der Typ von GenderName ist Zeichenfolge –

+1

haben Sie versucht, Tupel anstelle von anonymen Objekten zu verwenden? – Luiso

Antwort

2

Wenn Sie Ihre Gruppe Bestellung führt Sie Key mit, dass in Ihrem Fall ist komplex anonymouse Typ-2-Felder enthält:

var ageStats = vModel 
       .GroupBy(l => new { Age = 10 * (l.Age/10), l.GenderName }) 
       .OrderBy(x => x.Key) //<-- this line 
       .Select(g => new 
          { 
           Name = g.Key, 
           Count = g.Select(l => l.Age).Count() 
          }) 
       .ToList(); 

Es ist mit in diesem Fall nur Age Gruppierung becouse anonymouse Typ funktioniert einfach int Feld.

Wenn Sie Ihre Ergebnisse bestellen möchten irgendwie sollten Sie wie folgt Feldpunkt:

.OrderBy(x => x.Key.Age) 

Oder diese:

.OrderBy(x => x.Key.GenderName) 

Wenn Sie mit dem Age dann durch GenderName Verwendung zuerst bestellen möchten ThenBy Erweiterungsmethode wie folgt:

.OrderBy(x => x.Key.Age).ThenBy(x => x.Key.GenderName) 
-1

Wenn Sie das tun:

new { Age = 10 * (l.Age/10), l.GenderName } 

Sie einen anonymen Typ erstellen, die ich glaube nicht implementiert IComparable. Wenn Sie die Klammern und das , l.GenderName auslassen, ist das Ergebnis des Ausdrucks ein int, der IComparable implementiert.

+0

Das Auslassen des ', l.GenderName' würde die gewünschte Gruppe nicht ausführen. –

+0

Ich denke, diese Antwort erklärt den Kompilierungsfehler, aber @ Luisos Kommentar zu Tuples auf dem ursprünglichen Beitrag bietet eine gute Antwort. – wablab

+0

@KennethK., Ich schlug nicht vor, dass dies die Gruppierung durchführen würde, die er wollte. Aber Punkt genommen: das war keine "Antwort", also sollte ich es als Kommentar gepostet haben. – wablab