我有一个产品表可以在不同的位置提交给返工任务,但我只需要根据产品选择最新产品。
我有下表:
ID Tag Location task Date
1 1 A T1 2016/06/01
2 1 B T1 2016/07/01
3 2 A T1 2016/06/01
4 2 A T2 2016/07/01
选择带有最新日期的标签行,输出ID为2和ID 4的行。
对此有什么正确的linq
查询?
答案 0 :(得分:0)
首先group by
代码,然后选择max
日期
var result = db.Table.GroupBy(i => i.Tag).Select(i => new
{
Tag = i.Key,
Date = i.Max(t => t.Date)
}).ToList();
更新1(评论1)
var result = (from x in db.Table
join z in (db.Table.GroupBy(i => i.Tag).Select(i => new
{
Tag = i.Key,
Date = i.Max(t => t.Date)
})
) on new { A = x.Tag, B = x.Date} equals { A = z.Tag, B = z.Date }
select x).ToList();
更新2(评论2)
var result = (from x in db.Table
join z in (db.Table.GroupBy(i => new { i.Tag, i.Task }).Select(i => new
{
Tag = i.Key.Tag,
Task = i.Key.Task,
Date = i.Max(t => t.Date)
})
) on new { A = x.Tag, B = x.Date, C = x.Task} equals { A = z.Tag, B = z.Date, C = z.Task }
select x).ToList();