1

我需要按 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)

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

4

2 回答 2

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)
于 2013-02-19T23:41:55.140 回答
1

怎么样:

    var ordered = Elev8SnaTowelTables
        .GroupBy(x => new { x.Col1, x.Col2, x.Col3 })
        .OrderByDescending(g => g.Count())
        .ThenByDescending(g => g.Max(x => x.CreatedDateTime));
于 2013-02-19T23:39:28.930 回答