首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用max的Linq组:如何获得最大值的完整数据集?

使用max的Linq组:如何获得最大值的完整数据集?
EN

Stack Overflow用户
提问于 2017-01-11 16:50:17
回答 2查看 280关注 0票数 1

到目前为止,我得到的是:

代码语言:javascript
复制
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?

(预先谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-11 16:56:38

您可以按rtimestamp排序并选择第一个分组

代码语言:javascript
复制
var a = from e in tcdb.timeclockevent
        group e by e.workerId into r
        select r.OrderByDescending(d => d.timestamp).FirstOrDefault();
票数 1
EN

Stack Overflow用户

发布于 2017-01-11 20:56:23

有谁知道我如何用每个tcdb.timeclock的最大时间戳获得整个workerId的数据集呢?

那么,简单的查询应该如下所示:

代码语言:javascript
复制
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的最大时间戳记录,然后在内存中进行分组:

代码语言:javascript
复制
var queryB = tcdb.timeclockevent
    .Where(e => !tcdb.timeclockevent.Any(e2 =>
        e2.workerId == e.workerId && e2.timestamp > e.timestamp))
    .AsEnumerable()
    .GroupBy(e => e.workerId);

你可以试着看看哪一个对你的数据表现得更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41596346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档