1

我有一个如下的数据表

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

4 回答 4

4
var result = list.GroupBy(x => x.A).Select(x => x.First()).ToList();

DistinctByMoreLINQ使用

var result = list.DistinctBy(x => x.A).ToList();
于 2012-09-05T09:15:01.670 回答
3
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();
于 2012-09-05T09:20:32.393 回答
2

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

这里有一个代码示例:

使用 linq to entity 获取不同的记录

于 2012-09-05T09:15:23.067 回答
1
var dt = new DataTable();
//init your datatable
var dist = dt.Rows.Cast<DataRow>().GroupBy(r=>r.A).Select(g=>g.First()).ToArray();
于 2012-09-05T09:18:17.900 回答