2011-01-18 17 views
7

Supongamos que tengo una tabla llamada Población que almacena algunos datos demográficos. En T-SQL, para obtener el número de los mayores de 50 años, podría hacer algo como esto:¿Linq recupera todos los registros primero si hago un conteo?

SELECT COUNT(*) FROM POPULATION 
WHERE AGE > 50 

pensé que la siguiente declaración de LINQ iba a funcionar, pero sólo devuelve cero y no entiendo por qué.

var count = _context.Population.Count(x => x.Age > 50); 

Para que yo para realmente obtener el recuento, que tengo que hacer cualquiera de las siguientes:

var count = _context.Populaton.Where(x => x.Age > 50).Count(); 

var count = _context.Population.Select(x => x.Age > 50).Count(); 

Por qué son los escenarios anteriores el caso?

+2

¿Hay algún detalle de implementación que esté omitiendo? context.TableName.Count (x => x.SomeCondition); funciona bien para mí – jeffora

+0

Su primera declaración LINQ * debería * funcionar igual que las dos últimas. Suena como un problema con el proveedor. ¿Qué proveedor de LINQ estás usando? – Greg

+0

La respuesta que seleccionó para esta pregunta es incorrecta e irrelevante. Está sucediendo algo más, muy probablemente con el proveedor de consultas que está utilizando. – jason

Respuesta

-2

Correcto. como en cualquier declaración de SQL, tiene un cierto orden que debe seguir. y si haces una cuenta de dónde, básicamente no le das nada con lo que contar.

1

En todos los casos Count() no va a hacer el cálculo en la memoria en base a los registros devueltos desde la base de datos, pero en realidad va a cambiar el SQL generado para incluir la declaración COUNT. Una versión simplista de la consulta TSQL generada sería algo así como:

SELECT 
    COUNT(1) 
    FROM [dbo].[Population] AS [Extent1] 
    WHERE [Extent1].[Age] > 50 

Cuando se llama a Count() la consulta se ejecuta inmediatamente. Todas sus consultas parecen ser correctas, por lo que debe verificar su base de datos, proveedor y contexto para asegurarse de que la consulta se esté ejecutando correctamente.

Cuestiones relacionadas