选择分组中的字段

Mat*_*ver 2 .net c# linq

我的内容中包含以下数据DataTable:

   id   vrn   seenDate
   ---  ----  --------

    1   ABC   2017-01-01 20:00:05
    2   ABC   2017-01-01 18:00:09
    3   CCC   2016-05-05 00:00:00
Run Code Online (Sandbox Code Playgroud)

我试图修改数据只显示vrn最近日期的值.这是我到目前为止所做的:

myDataTable.AsEnumerable().GroupBy(x => x.Field<string>("vrn")).Select(x => new { vrn = x.Key, seenDate = x.Max(y => y.Field<DateTime>("seenDate")) });
Run Code Online (Sandbox Code Playgroud)

我需要修改上面的内容以选择id字段(即我不想在这个字段上分组,但我希望将它包含在结果数据集中).

我不能放入x.Field<int>("id")Select()部分,因为Field子句不存在.

Iva*_*oev 5

您需要MaxByMoreLINQ等效的方法.

在标准LINQ中,可以使用OrderByDescending+ First调用进行模拟:

var result = myDataTable.AsEnumerable()
    .GroupBy(x => x.Field<string>("vrn"))
    .Select(g => g.OrderByDescending(x => x.Field<DateTime>("seenDate")).First())
    .Select(x => new
    {
        vrn = x.Field<string>("vrn"),
        id = x.Field<int>("id"),
        seenDate = x.Field<DateTime>("seenDate"),
    });
Run Code Online (Sandbox Code Playgroud)