我有一个如下的数据表
A | B
-------
1 | b1
1 | b2
1 | b3
2 | b4
2 | b5
3 | b6
3 | b7
3 | b8
3 | b9
如何编写 LINQ 命令来选择 A 列上每个不同值的第一行:
A | B
---------
1 | b1
2 | b4
3 | b6
var result = list.GroupBy(x => x.A).Select(x => x.First()).ToList();
或DistinctBy
从MoreLINQ使用
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();
var dt = new DataTable();
//init your datatable
var dist = dt.Rows.Cast<DataRow>().GroupBy(r=>r.A).Select(g=>g.First()).ToArray();