次の記録を考慮してください。
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
F1
フィールドに基づいてグループ化し、Id
でソートし、これらのレコードと同様のグループの最初のレコードからすべてのフィールドを取得します。
Id F1 F2 F3
-------------------------------------------------
1 Nima 1990 10
4 John 2001 1
6 Sara 2010 4
Linqを使用してこれを行うにはどうすればよいですか?
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());
@Alirezaのオーナは完全に正しいですが、このコードを使用するときは注意する必要があります
var res = from element in list
group element by element.F1
into groups
select groups.OrderBy(p => p.F2).First();
リストを順序付けしてからグループ化を実行してグループの最初の行を取得するため、このコードと似ています
var res = (from element in list)
.OrderBy(x => x.F2)
.GroupBy(x => x.F1)
.Select()
同じグループ化結果を取得するが、F2の最初の要素とF3の最後の要素、またはよりカスタムなものを取得するなど、より複雑な操作を行いたい場合は、コードを追加してください。
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;
});
だからあなたは次のようなものを得るでしょう
F1 F2 F3
-----------------------------------
Nima 1990 12
John 2001 2
Sara 2010 4
あなたが望むものを達成するためにそれを使用してください。次に、返すプロパティを決定します。
yourList.OrderBy(l => l.Id).GroupBy(l => new { GroupName = l.F1}).Select(r => r.Key.GroupName)