2011-01-26 17 views
6

Tengo esta consulta que funciona, pero cuando intento escribir el equivalente en LINQ obtengo el SQL incorrecto producido.¿Cómo escribir un grupo de conteo selecto por consulta SQL en LINQ?

Mi consulta es:

SELECT COUNT(*) 
FROM tableName 
GROUP BY ColumnId 

He intentado escribir como:

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

Pero mirando en LINQPad se está produciendo el SQL:

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

¿Qué soy yo haciendo mal? ¡Gracias!

Respuesta

18

Su consulta LINQ está contando el número de grupos pero su consulta SQL está produciendo los conteos por grupo. Desea

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

para obtener los recuentos por grupo.

Tenga en cuenta que si quieres exactamente el mismo SQL que desea

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

El primer ejemplo anterior debería ser un poco más útil, ya que proporciona los identificadores de cada grupo así.

0

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