LINQ to DataSet DataTable Group By - 语法

时间:2014-09-04 17:47:26

标签: c# linq dataset linq-to-dataset

我的数据集包含例如id,date,other fields ......

enter image description here

我想根据ID和最新日期检索唯一的行。

我有这个查询,但我无法弄清楚将日期条件放在何处。

DataTable dt = ds.Tables[0]
                     .AsEnumerable()
                     .GroupBy(row => row.Field<string>("id"))
                     .Select(group => group.First())
                     .CopyToDataTable();

r.Text = dt.Rows.Count.ToString();

gv.DataSource = dt;
gv.DataBind();

结果应为

1 - 8/2/2014
2 - 1/8/2014
4 - 1/2/2011

谢谢,

2 个答案:

答案 0 :(得分:2)

您需要为OrderByDescending字段执行Date,然后选择第一个:

 .Select(group => group.OrderByDescending(r=> r.Field<DateTime>("Date")).First())

所以你的查询是:

DataTable dt = ds.Tables[0].AsEnumerable()
                .GroupBy(row => row.Field<string>("id"))
                .Select(group => group
                                .OrderByDescending(r=> r.Field<DateTime>("Date"))
                                .First())
                .CopyToDataTable();

答案 1 :(得分:0)

也许你可以使用它:LINQ to Datatable Group by and return all columns

只返回你想要的字段,p.e。日期