Procédure : parcourir des résultats de requête (Entity Framework)
Cette rubrique montre comment parcourir les résultats d'une requête. L'exemple obtient cinq objets Product après avoir ignoré les trois premiers du résultat de la requête, lequel est trié par valeur Product.ListPrice. Le même exemple est repris en utilisant chacune des technologies de requête Entity Framework suivantes :
LINQ to Entities
Entity SQL avec ObjectQuery<T>
Méthodes du Générateur de requêtes d'ObjectQuery<T>
L'exemple de cette rubrique est basé sur le modèle de vente Adventure Works. Pour exécuter le code de cet exemple, vous devez déjà avoir ajouté le modèle de vente AdventureWorks à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour cela, exécutez les procédures décrites dans Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework). Vous pouvez également définir le modèle de vente AdventureWorks Sales Model à l'aide de l'Assistant EDM. Pour plus d'informations, voir Procédure : utiliser l'Assistant Entity Data Model (Entity Framework).
Exemple
Cet exemple utilise LINQ to Entities.
Using AWEntities As New AdventureWorksEntities
'LINQ to Entities only supports Skip on ordered collections.
Dim products As IOrderedQueryable(Of Product) = _
AWEntities.Product.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 AWEntities = new AdventureWorksEntities())
{
// LINQ to Entities only supports Skip on ordered collections.
IOrderedQueryable<Product> products = AWEntities.Product
.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);
}
}
Cet exemple utilise Entité SQL.
Using advWorksContext As New AdventureWorksEntities()
' Define the parameters used to define the "page" of returned data.
Try
' Create a query that takes two parameters.
Dim esqlQuery As String = "SELECT VALUE product FROM " & _
" AdventureWorksEntities.Product AS product " & _
" order by product.ListPrice SKIP @skip LIMIT @limit"
Dim productQuery As New ObjectQuery(Of Product)(esqlQuery, advWorksContext)
' Add parameters to the collection.
productQuery.Parameters.Add(New ObjectParameter("skip", 3))
productQuery.Parameters.Add(New ObjectParameter("limit", 5))
' Iterate through the page of Product items.
For Each result As Product In productQuery
Console.WriteLine("ID: {0} Name: {1}", _
result.ProductID, result.Name)
Next
Catch ex As EntityException
Console.WriteLine(ex.ToString())
Catch ex As InvalidOperationException
Console.WriteLine(ex.ToString())
End Try
End Using
using (AdventureWorksEntities advWorksContext =
new AdventureWorksEntities())
{
try
{
// Create a query that takes two parameters.
string queryString =
@"SELECT VALUE product FROM
AdventureWorksEntities.Product AS product
order by product.ListPrice SKIP @skip LIMIT @limit";
ObjectQuery<Product> productQuery =
new ObjectQuery<Product>(queryString, advWorksContext);
// 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);
}
catch (EntityException ex)
{
Console.WriteLine(ex.ToString());
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex.ToString());
}
}
Cet exemple utilise la méthode du Générateur de requêtes.
Using advWorksContext As New AdventureWorksEntities()
' Define the parameters used to define the "page" of returned data.
Dim skipValue As Integer = 3
Dim limitValue As Integer = 5
Try
' 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) = advWorksContext.Product _
.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
Catch ex As EntitySqlException
Console.WriteLine(ex.ToString())
End Try
End Using
using (AdventureWorksEntities advWorksContext =
new AdventureWorksEntities())
{
// Define the parameters used to define the "page" of returned data.
int skipValue = 3;
int limitValue = 5;
try
{
// 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 = advWorksContext.Product
.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);
}
catch (EntitySqlException ex)
{
Console.WriteLine(ex.ToString());
}
}
Voir aussi
Référence
SKIP (Entity SQL)
LIMIT (Entity SQL)
Skip
Top
Concepts
Pagination (Entity SQL)
Langage Entity SQL
Autres ressources
Utilisation d'EntityClient (Tâches Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand