次のようなデータテーブルがあります
A | B
-------
1 | b1
1 | b2
1 | b3
2 | b4
2 | b5
3 | b6
3 | b7
3 | b8
3 | b9
列 A の個別の値ごとに最初の行を選択する LINQ コマンドを作成するにはどうすればよいですか。
A | B
---------
1 | b1
2 | b4
3 | b6
var result = list.GroupBy(x => x.A).Select(x => x.First()).ToList();
またはMoreLINQDistinctBy
から使用
var result = list.DistinctBy(x => x.A).ToList();
IEnumerable<DataRow> aRows = table.AsEnumerable()
.GroupBy(r => r.Field<int>("A"))
.Select(g => g.First());
B
-fieldで並べ替える場合(最初に並べ替えない場合):
IEnumerable<DataRow> aRows = table.AsEnumerable()
.OrderBy(r => r.Field<String>("B"))
.GroupBy(r => r.Field<int>("A"))
.Select(g => g.First());
それから別のテーブルが必要な場合:
DataTable tblARows = aRows.CopyToDataTable();
列 A でグループ化し、B の最初のエントリを選択する必要があります (B 列の値を並べ替えたい場合があります)。
ここにコードサンプルがあります:
var dt = new DataTable();
//init your datatable
var dist = dt.Rows.Cast<DataRow>().GroupBy(r=>r.A).Select(g=>g.First()).ToArray();