2010-07-27 19 views
10

esta es una pregunta simple (creo), pero no he podido encontrar una solución. Sé que con otros tipos de consultas, puede agregar una cláusula límite que hace que la consulta solo devuelva tantos resultados. ¿Es esto posible con una consulta de entidad?Limitar el tamaño de la consulta con el marco de entidad

var productQuery = from b in solutionContext.Version 
           where b.Product.ID != 1 && b.VersionNumber == b.Product.ActiveNumber 
           orderby b.Product.LastNumber 
           select b; 

Solo quiero hacer que esta consulta solo devuelva 25 objetos de versión. Gracias por cualquier ayuda.

Respuesta

32

seguro .. por ejemplo, puede hacerlo de esta manera:

var productQuery = from b in solutionContext.Version 
          where b.Product.ID != 1 && b.VersionNumber == b.Product.ActiveNumber 
          orderby b.Product.LastNumber 
          select b; 

var limitedProductQuery = productQuery.Take(25); 

También es posible que necesite esto para resultados de paginación:

var pagedProductQuery = productQuery.Skip(25 * page).Take(25) 
+0

Eso va a seleccionar todo de th La tabla antes de restringir los resultados en la memoria. –

+5

David ... no, no es ... Su objeto que se puede consultar ... es equivalente a la consulta ... Se ejecutará cuando intente obtener algunos objetos o utilice el método ToList, etc. –

+0

@David, lo que en esa consulta original obliga a la ejecución ? – Marc

3

Lo que estamos buscando es Take:

var productQuery = (from b in solutionContext.Version 
        where b.Product.ID != 1 
         && b.VersionNumber == b.Product.ActiveNumber 
        orderby b.Product.LastNumber 
        select b).Take(25); 
3
var productQuery = (from b in solutionContext.Version 
          where b.Product.ID != 1 && b.VersionNumber == b.Product.ActiveNumber 
          orderby b.Product.LastNumber 
          select b).Take(25); 
Cuestiones relacionadas