【问题标题】:Get the first record of a group in LINQ? [duplicate]获取 LINQ 中组的第一条记录? [复制]
【发布时间】:2010-10-03 15:43:28
【问题描述】:

总结:如何在有序组数据中获取前 1 个元素

我正在尝试按 CarId 字段进行分组,然后在每个组中,我想对 DateTimeStamp 字段进行降序排序。所需的数据将是每辆车给我最新的 DateTimeStamp,并且只有组中的那 1 个。

我可以做到这一点,但是在从组中取出前 1 名并按 DateTimeStamp desc 对组进行排序时遇到问题。

这是我在第一组手术后得到的

group 1
------------------------
CarId  DateTimeStamp 
1      1/1/2010
1      1/3/2010
1      3/4/2010

group 2
------------------------
CarId  DateTimeStamp 
2      10/1/2009
2      1/3/2010
2      9/4/2010

我想要的只有有序组中的前 1 个

    group 1
    ------------------------
    CarId  DateTimeStamp 
    1      3/4/2010

    group 2
    ------------------------
    CarId  DateTimeStamp 
    2      9/4/2010

Brickwall: 我停下来的地方,需要 group by 子句中的 CarId 和 DateTimeStamp,以便稍后按 DateTimeStamp 排序。也许日期的排序应该在一个单独的函数中完成,不确定。

【问题讨论】:

    标签: c# entity-framework linq c#-4.0 linq-to-entities


    【解决方案1】:
    data
        .GroupBy(
            x => x.CardId, 
            (x, y) => new { 
                Key = x, 
                Value = y.OrderByDescending(z => z.DateTimeStamp).FirstOrDefault() 
            }
        );
    

    这将按CardId 对所有元素进行分组,然后按DateTimeStamp(降序)对每个组的元素进行排序,然后削减每个组以仅包含第一个元素。最后,它返回一个可枚举的“组”(带有引号,因为它们实际上是一种匿名类型,而不是 IGrouping),其中每个组都有您正在寻找的一个项目。

    【讨论】:

    • 做到了!我确实遇到了一个异常,不得不使用 FirstOrDefault() 而不是 First()。谢谢!
    • +1:完美。正是我所需要的(我实际上可以遵循的分组版本和第一条记录:)
    • 谢谢,我正在寻找这个,我搜索了sql group by last record,但没有找到解决方案linq group by last record 帮助来到这里,只需要,我必须为@'键入' 987654327@
    • 我可以按降序连接两列吗?喜欢z.Field<string>("Date") + z.Field<string>("Time")?由于它们是字符串和单独的列,我该如何实现?如何在CardId 旁边选择多个列?
    • @Si8,你真的应该问一个单独的问题,但你想要的是.OrderByDescending(...).ThenByDescending(...)
    【解决方案2】:

    我觉得查询表达式语法更容易理解:

    from x in data 
    group x by x.CarId into grp
    select new {
        CarId = x.CarId,
        Record = (from x in grp orderby z.DateTimeStamp descending).FirstOrDefault()
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2014-08-29
      • 2013-12-20
      • 2017-05-08
      • 2011-01-11
      相关资源
      最近更新 更多