通过LINQ从数据表中选择第一行

时间:2012-09-05 09:09:40

标签: c# linq

我有一个像以下

的数据表
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

4 个答案:

答案 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)

您需要按A列进行分组,然后选择B的第一个条目。(您可能希望对B列值进行排序)

这里有一个代码示例:

Get distinct records using linq to entity

答案 3 :(得分:1)

var dt = new DataTable();
//init your datatable
var dist = dt.Rows.Cast<DataRow>().GroupBy(r=>r.A).Select(g=>g.First()).ToArray();