var a = from e in tcdb.timeclockevent
group e by e.workerId into r
select new { workerId = r.Key, Date = r.Max(d => d.timestamp) };
此查询为我提供了最新的"时间戳"每个workerId(注意:workerId不是tcdb.timeclockevent的主键)。所以它只给我两对值,但我需要整个数据集
有没有人知道如何使用每个workerId的最大时间戳获取tcdb.timeclock的整个数据集?
OR
有人知道我如何获得每个工人的最大日期数据集的ID吗?
提前谢谢你:)
答案 0 :(得分:1)
您可以按r
订购timestamp
分组,然后选择第一个
var a = from e in tcdb.timeclockevent
group e by e.workerId into r
select r.OrderByDescending(d => d.timestamp).FirstOrDefault();
答案 1 :(得分:1)
有没有人知道如何使用每个workerId的最大时间戳获取tcdb.timeclock的整个数据集?
嗯,直截了当的查询是这样的:
var queryA =
from e in tcdb.timeclockevent
group e by e.workerId into g
let maxDate = g.Max(e => e.timestamp)
select new { workerId = g.Key, events = g.Where(e => e.timestamp == maxDate) };
如果您不需要IQueryable<T>
结果,并且由于没有直接返回分组结果集的SQL构造,您可以尝试以下查询,该查询使用不同的方式过滤最大记录数据库中每个workerId的时间戳,然后在内存中进行分组:
var queryB = tcdb.timeclockevent
.Where(e => !tcdb.timeclockevent.Any(e2 =>
e2.workerId == e.workerId && e2.timestamp > e.timestamp))
.AsEnumerable()
.GroupBy(e => e.workerId);
您可以尝试查看哪种方法可以更好地处理您的数据。