我有一个像以下
的数据表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
答案 0 :(得分:4)
var result = list.GroupBy(x => x.A).Select(x => x.First()).ToList();
或使用MoreLINQ
中的DistinctBy
var result = list.DistinctBy(x => x.A).ToList();
答案 1 :(得分:3)
IEnumerable<DataRow> aRows = table.AsEnumerable()
.GroupBy(r => r.Field<int>("A"))
.Select(g => g.First());
如果您希望按B
- 字段排序(如果它不是由初始订购的话):
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();
答案 2 :(得分:2)
答案 3 :(得分:1)
var dt = new DataTable();
//init your datatable
var dist = dt.Rows.Cast<DataRow>().GroupBy(r=>r.A).Select(g=>g.First()).ToArray();