到目前为止,我得到的是:
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的主键)。因此,它只给出两个值的对,但我需要整个数据集。
有谁知道我如何用每个tcdb.timeclock的最大时间戳获得整个workerId的数据集呢?
或
有谁知道我如何获得每个员工的最大日期的数据集的Id?
(预先谢谢:)
发布于 2017-01-11 16:56:38
您可以按r按timestamp排序并选择第一个分组
var a = from e in tcdb.timeclockevent
group e by e.workerId into r
select r.OrderByDescending(d => d.timestamp).FirstOrDefault();发布于 2017-01-11 20:56:23
有谁知道我如何用每个tcdb.timeclock的最大时间戳获得整个workerId的数据集呢?
那么,简单的查询应该如下所示:
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);你可以试着看看哪一个对你的数据表现得更好。
https://stackoverflow.com/questions/41596346
复制相似问题