2011-01-26 10 views
6

Ho questa query che funziona ma quando provo a scrivere l'equivalente in LINQ ottengo l'SQL non corretto prodotto.Come scrivere un gruppo di conteggio selezionato tramite query SQL in LINQ?

La mia domanda è:

SELECT COUNT(*) 
FROM tableName 
GROUP BY ColumnId 

ho provato a scrivere come:

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

Ma guardando in LINQPad sta producendo SQL:

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

Che cosa sono io fare male? Grazie!

risposta

18

La query LINQ sta contando il numero di gruppi ma la query SQL sta producendo i conteggi per gruppo. Si desidera

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

per ottenere i conteggi per gruppo.

Si noti che se si vuole esattamente lo stesso SQL che si desidera

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

Il primo esempio di cui sopra dovrebbe essere un po 'più utile in quanto fornisce gli ID di ogni gruppo pure.

0

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