Frage Wie Sie Linq verwenden, um alle N Zeilen zu gruppieren


Ich kann keinen Weg finden, das funktionieren zu lassen und zu hoffen, dass jemand eine Idee hat. Ein vereinfachtes Beispiel wäre eine Liste mit den Ganzzahlen 1-100, ich möchte alle 3 Zeilen gruppieren, so dass das Ergebnis 1,2,3 in der ersten Gruppe und dann 4,5,6 in der nächsten Gruppe usw. wäre. Ich weiß, wie bekomme jeden n-ten Datensatz, aber was ich brauche, sind alle Datensätze, damit ich sie dann zusammenfassen kann, indem ich zuerst, last, sum, max usw. benutze.

Vielen Dank!


16
2018-05-13 20:41


Ursprung


Antworten:


var q = Enumerable.Range(0, 100).GroupBy(x => x/3);

Fehle ich etwas?


24
2018-05-13 20:53



Dieses Beispiel sollte für die Abfrage von nicht-numerischen Sammlungen funktionieren. Er projiziert einen Index in das zu gruppierende Objekt und entfernt ihn dann während der Gruppierung wieder.

var studentQuery2 = students
    .Select((student, index) => new {student, index})
    .GroupBy(g => g.index / 3, i => i.student);

31
2018-05-13 20:58



Wie wäre es mit einem einfacheren Ansatz?

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3);

Aktualisieren: Wenn Sie das verwenden Key Wert des Gruppenelements, dann müssen Sie die aufzählbare Gruppe in eine Liste konvertieren. Sonst wirst du ein anderes bekommen Key jedes Mal, wenn es zugegriffen wird.

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3).ToList();

1
2018-04-07 14:09