1

次のように機能するSQLクエリがあります。

SELECT TOP 100 
    Max(Table_ID) as Max_ID, 
Col1,
Col2,
Col3,
COUNT(*) AS Occurences
FROM myTable
GROUP BY Col1, Col2, Col3
ORDER BY Occurences DESC

同じ Linq クエリを作成するにはどうすればよいですか?

問題は、グループ化を適用するとすぐに、グループ化されていない列Table_IDにアクセスできないことです。

var errors = from r in MyTable
    group e by new {e.Col1, e.Col2} into g
    orderby g.Count() descending
    select new {MaxId = ???, Count =  g.Count(), g.Key.Col1, g.Key.Col2};
4

2 に答える 2

4

使用g.Max(x => x.TableID):

var errors = from r in MyTable
    group e by new {e.Col1, e.Col2} into g
    orderby g.Count() descending
    select new {MaxId = g.Max(x => x.TableID), 
                Count =  g.Count(), g.Key.Col1, g.Key.Col2};

(もちろん、各グループ内で最大値が必要であると仮定します。)

于 2010-07-09T15:16:37.773 に答える
1

ジョンの答えは良いです。理由について少し詳しく説明したいと思います。

問題は、グループ化を適用するとすぐに、グループ化されていない列にアクセスできないことです

r が範囲外になりました...なぜですか?

クエリを終了する 2 つの方法はselectorgroup by句です。にクエリ継続句into gを追加すると、つまり、クエリgroup byの最上位の要素があり、gこの時点までにクエリで導入されたすべての変数がスコープから削除されます。

この msdn 記事でspliceという単語を検索すると、サンプルが表示されます。

intoこの の使用をと混同しないでくださいjoin on equals into。これはグループ結合であり、クエリの継続ではありません。グループ結合は、以前の変数をスコープから削除しません。

于 2010-07-09T15:37:10.400 に答える