我有以下数据表结构
ID Date Vendor Grade
1 20-nov-2013 xyz A
2 26-Apr-2013 abc B
1 21-nov-2013 pqr D
1 10-nov-2013 abc C
2 15-dec-2013 pqr A
2 20-May-2013 abc B
我希望将此表放在列ID
上,然后选择具有最大日期时间值的行
此表的示例答案是
ID Date Vendor Grade
1 21-nov-2013 pqr D
2 15-dec-2013 pqr A
到目前为止,我已经尝试了以下但是不知道下一步该怎么做
var chk = (from s in dt.AsEnumerable()
where s.Field<int>("ID") == 1 || s.Field<int>("ID") == 2
select s).GroupBy(k => k.Field<int>("ID")});
答案 0 :(得分:4)
按ID
对行进行分组,然后按Date
对每组行进行排序,并选择第一行:
var chk = from r in dt.AsEnumerable()
let id = r.Field<int>("ID")
where id == 1 || id == 2
group r by id into g
select g.OrderByDescending(r => r.Field<DateTime>("Date")).First();
可生产
ID Date Vendor Grade
1 21-nov-2013 pqr D
2 15-dec-2013 pqr A
答案 1 :(得分:0)
查询语法:
var chk = from r in dt.AsEnumerable() /*where 1=1 */
group r by r.Field<int>("ID") into g
select g.OrderByDescending(t => t.Field<int>("ID")).First();
流利语法:
dt.AsEnumerable().GroupBy(r => r.Field<int>("ID")).Select(g => g.OrderByDescending(t => t.Field<int>("ID")).First());