Cómo: Paginar a través de los resultados de una consulta (Entity Framework)

En este tema se describe cómo paginar los resultados de una consulta. En el ejemplo se obtienen cinco objetos Product después de omitir los primeros tres de los resultados de la consulta, que están ordenados por Product.ListPrice. Se muestra el mismo ejemplo con cada una de las siguientes tecnologías de consulta de Entity Framework:

  • LINQ to Entities

  • Entity SQL con ObjectQuery<T>

  • Métodos del generador de consultas de ObjectQuery<T>

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este tema, debe haber agregado el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use Entity Framework. Para obtener más información, vea Cómo: Usar el Asistente para Entity Data Model (Entity Framework) o Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente un modelo Entity Data Model (Entity Framework).

Ejemplo

Este es el ejemplo de LINQ to Entities .

Using context As New AdventureWorksEntities
    'LINQ to Entities only supports Skip on ordered collections.
    Dim products As IOrderedQueryable(Of Product) = _
            context.Products.OrderBy(Function(p) p.ListPrice)

    Dim allButFirst3Products As IQueryable(Of Product) = products.Skip(3)

    Console.WriteLine("All but first 3 products:")
    For Each product As Product In allButFirst3Products
        Console.WriteLine("Name: {0} \t ID: {1}", _
                product.Name, _
                product.ProductID)
    Next
End Using
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // LINQ to Entities only supports Skip on ordered collections.
    IOrderedQueryable<Product> products = context.Products
            .OrderBy(p => p.ListPrice);

    IQueryable<Product> allButFirst3Products = products.Skip(3);

    Console.WriteLine("All but first 3 products:");
    foreach (Product product in allButFirst3Products)
    {
        Console.WriteLine("Name: {0} \t ID: {1}",
            product.Name,
            product.ProductID);
    }
}

Este es el ejemplo de Entity SQL .

Using context As New AdventureWorksEntities()
    ' Create a query that takes two parameters. 
    Dim queryString As String = "SELECT VALUE product FROM AdventureWorksEntities.Products AS product " & _
        " order by product.ListPrice SKIP @skip LIMIT @limit"

    Dim productQuery As New ObjectQuery(Of Product)(queryString, context)

    ' Add parameters to the collection. 
    productQuery.Parameters.Add(New ObjectParameter("skip", 3))
    productQuery.Parameters.Add(New ObjectParameter("limit", 5))

    ' Iterate through the collection of Contact items. 
    For Each result As Product In productQuery
        Console.WriteLine("ID: {0}; Name: {1}", result.ProductID, result.Name)
    Next
End Using
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Create a query that takes two parameters.
    string queryString =
        @"SELECT VALUE product FROM 
          AdventureWorksEntities.Products AS product 
          order by product.ListPrice SKIP @skip LIMIT @limit";

    ObjectQuery<Product> productQuery =
        new ObjectQuery<Product>(queryString, context);

    // Add parameters to the collection.
    productQuery.Parameters.Add(new ObjectParameter("skip", 3));
    productQuery.Parameters.Add(new ObjectParameter("limit", 5));

    // Iterate through the collection of Contact items.
    foreach (Product result in productQuery)
        Console.WriteLine("ID: {0}; Name: {1}",
        result.ProductID, result.Name);
}

A continuación se muestra el ejemplo del método del generador de consultas.

Using context As New AdventureWorksEntities()
    ' Define the parameters used to define the "page" of returned data. 
    Dim skipValue As Integer = 3
    Dim limitValue As Integer = 5

    ' Define a query that returns a "page" or the full 
    ' Product data using the Skip and Top methods. 
    ' When Top() follows Skip(), it acts like the LIMIT statement. 
    Dim query As ObjectQuery(Of Product) = _
        context.Products.Skip("it.ListPrice", "@skip", _
            New ObjectParameter("skip", skipValue)).Top("@limit", New ObjectParameter("limit", limitValue))

    ' Iterate through the page of Product items. 
    For Each result As Product In query
        Console.WriteLine("ID: {0}; Name: {1}", result.ProductID, result.Name)
    Next
End Using
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define the parameters used to define the "page" of returned data.
    int skipValue = 3;
    int limitValue = 5;

    // Define a query that returns a "page" or the full 
    // Product data using the Skip and Top methods. 
    // When Top() follows Skip(), it acts like the LIMIT statement.
    ObjectQuery<Product> query = context.Products
        .Skip("it.ListPrice", "@skip",
                new ObjectParameter("skip", skipValue))
        .Top("@limit", new ObjectParameter("limit", limitValue));

    // Iterate through the page of Product items.
    foreach (Product result in query)
        Console.WriteLine("ID: {0}; Name: {1}",
        result.ProductID, result.Name);
}

Vea también

Referencia

SKIP (Entity SQL)
LIMIT (Entity SQL)
Skip
Top

Conceptos

Paginación (Entity SQL)
Lenguaje Entity SQL