Unter Berücksichtigung der folgenden Aufzeichnungen:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
2 Nima 1990 11
3 Nima 2000 12
4 John 2001 1
5 John 2002 2
6 Sara 2010 4
Ich möchte eine Gruppierung basierend auf dem F1
Feld und sortiere nach Id
und erhalte alle Felder aus dem ersten Datensatz der Gruppe, die diesen Datensätzen ähnlich sind:
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
4 John 2001 1
6 Sara 2010 4
Wie kann ich das mit linq machen?
var res = from element in list
group element by element.F1
into groups
select groups.OrderBy(p => p.F2).First();
var result = input.GroupBy(x=>x.F1,(key,g)=>g.OrderBy(e=>e.F2).First());
Die Antwort von @Alireza ist völlig korrekt, aber Sie müssen dies beachten, wenn Sie diesen Code verwenden
var res = from element in list
group element by element.F1
into groups
select groups.OrderBy(p => p.F2).First();
dies ähnelt diesem Code, weil Sie die Liste bestellen und dann die Gruppierung vornehmen, sodass Sie die erste Reihe von Gruppen erhalten
var res = (from element in list)
.OrderBy(x => x.F2)
.GroupBy(x => x.F1)
.Select()
Wenn Sie etwas Komplexeres tun möchten, wie das gleiche Gruppierungsergebnis, aber das erste Element von F2 und das letzte Element von F3 oder etwas Brauchbareres, können Sie dies tun, indem Sie den folgenden Code studieren
var res = (from element in list)
.GroupBy(x => x.F1)
.Select(y => new
{
F1 = y.FirstOrDefault().F1;
F2 = y.First().F2;
F3 = y.Last().F3;
});
Also wirst du sowas bekommen
F1 F2 F3
-----------------------------------
Nima 1990 12
John 2001 2
Sara 2010 4
Verwenden Sie es, um das zu erreichen, was Sie wollen. Entscheiden Sie dann, welche Eigenschaften Sie zurückgeben möchten.
yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName)