LINQ Max Date with group by

时间:2013-02-19 23:25:33

标签: linq

我要求对列表进行排序1)不同项目出现的次数,然后2)如果两个不同行的计数相同,即该组最近使用的日期。

我的按功能分组并按计数排序没有日期:

(from x in data
group x by new { x.Col1, x.Col2, x.Col3} 
into g
let count = g.Count()
select new
{
    g.Key.Col1,
    g.Key.Col2,
    g.Key.Col3,
    count
}).OrderByDescending(x => x.count)

但是,我无法成功添加日期排序。我试图通过表达式将日期列添加为组中的聚合,但这不起作用。

(from x in data
group x by new { x.Col1, x.Col2, x.Col3, MaxDate = x.CreatedDateTime.Max()}
into g
let count = g.Count()
select new
{
    g.Key.Col1,
    g.Key.Col2,
    g.Key.Col3,
    count,
    g.Key.MaxDate
}).OrderByDescending(x => x.count).ThenByDescending(x => x.MaxDate)

我明白为什么它不起作用,我只是想不出另一条添加二级排序的路线。任何想法都表示赞赏!

2 个答案:

答案 0 :(得分:4)

这就是你要找的东西(我想)

from x in data
group x by new { x.Col1, x.Col2, x.Col3} 
into g
let count = g.Count()
select new
{
    g.Key.Col1,
    g.Key.Col2,
    g.Key.Col3,
    MaxDate = g.Select(x => x.CreatedDateTime)
               .OrderByDescending(d => d).FirstOrDefault(),
    count
}).OrderByDescending(x => x.count).ThenByDescending(x => x.MaxDate)

答案 1 :(得分:1)

怎么样:

    var ordered = Elev8SnaTowelTables
        .GroupBy(x => new { x.Col1, x.Col2, x.Col3 })
        .OrderByDescending(g => g.Count())
        .ThenByDescending(g => g.Max(x => x.CreatedDateTime));