Как постранично просмотреть результаты запроса (платформа Entity Framework)
В данном разделе описывается постраничный просмотр результатов выполнения запроса. В примере производится получение пяти объектов Product после пропускания первых трех объектов в результатах запроса, отсортированных по параметру Product.ListPrice. Показан один и тот же сценарий с использованием следующих технологий запроса платформы Entity Framework:
LINQ to Entities
Entity SQL и ObjectQuery<T>
Методы построителя запросов класса ObjectQuery<T>
Пример в этом разделе основан на модели Adventure Works Sales. Чтобы запустить код, используемый в данном примере, нужно сначала добавить к проекту модель AdventureWorks Sales и настроить его для использования платформы Entity Framework. Для этого выполните инструкции из разделов Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (платформа Entity Framework). Для определения модели AdventureWorks Sales можно также использовать мастер моделей EDM. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (платформа Entity Framework).
Примеры
Это пример 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);
}
}
Это пример на языке Entity 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());
}
}
Это пример метода построителя запросов.
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());
}
}
См. также
Справочник
SKIP (язык Entity SQL)
LIMIT (язык Entity SQL)
Skip
Top
Основные понятия
Разбиение на страницы (язык Entity SQL)
Язык Entity SQL
Другие ресурсы
Работа с EntityClient (задачи платформы Entity Framework)
How to: Execute an Entity SQL Query Using EntityCommand