c# - 在 LINQ 中获取组的第一条记录?

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

<分区>

总结:如何获取有序数据组中的前 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 排序。也许日期的排序应该在一个单独的函数中完成,不确定。

最佳答案

data
    .GroupBy(
        x => x.CardId, 
        (x, y) => new { 
            Key = x, 
            Value = y.OrderByDescending(z => z.DateTimeStamp).FirstOrDefault() 
        }
    );

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

关于c# - 在 LINQ 中获取组的第一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3850429/

相关文章:

c# - 没有基类的 EntityFramework 和 TPT

c# - DbExpressionBinding 需要带有集合 ResultType 的输入表达式。参数名称: input

c# - 如何在 WPF 中为 Viewport3D 控件切换到线框显示模式?

c# - Nest SuggestCompletion用法,抛出 'is not a completion suggest field'异常

c# - 无法创建常量值。只有原始类型

c# - 首先为 Entity Framework 代码中的所有字符串设置 MaxLength

c# - 嵌套类的 LINQ 查询

c# - 从 XML 字符串中提取

c# - 在 ListView 中显示数据表中的图像

c# - 带参数的属性