2011-01-26 8 views
6

私はこのクエリを使用していますが、LINQに相当するものを書き込もうとすると、誤ったSQLが生成されます。LINQでSQLクエリで選択カウントグループを書き込む方法は?

私のクエリは次のとおりです。

SELECT COUNT(*) 
FROM tableName 
GROUP BY ColumnId 

私のようにそれを書いてみました:

tableName.GroupBy(x => x.ColumnId).Count() 

しかし、それはSQLを生成しているLINQPadで探して:

SELECT COUNT(*) AS [value] 
FROM (
SELECT NULL AS [EMPTY] 
FROM [tableName] AS [t0] 
GROUP BY [t0].[ColumnId] 
) AS [t1] 

私は何間違っている?ありがとう!

答えて

18

LINQクエリはグループの数をカウントしていますが、SQLクエリはグループごとにカウントを生成しています。あなたが欲しい

var counts = tableName.GroupBy(x => x.ColumnId) 
         .Select(g => new { g.Key, Count = g.Count() }); 

グループごとにカウントを取得します。それは同様に、各グループのidを与えるので、あなたがまったく同じSQLをしたい場合は、

var counts = tableName.GroupBy(x => x.ColumnId) 
         .Select(g => g.Count()); 

をしたいという

注上記の最初の例では、もう少し便利にする必要があります。

0

トライtableName.GroupBy(x => x.ColumnId).Select(x => x.Count())

関連する問題