This question already has answers here:
How to get first record in each group using Linq

(5个答案)


3年前关闭。




摘要:如何获取有序数据组中的前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/

10-10 13:33