1

リストを 1) 個別の項目が表示される回数で並べ替え、次に 2) 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)

ただし、日付の並べ替えを正常に追加できませんでした。group by 式の集計として日付列を追加しようとしましたが、うまくいきません。

(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 に答える