Как использовать пути запросов для формирования результатов (платформа Entity Framework)
В этом разделе приведен пример задания пути запроса, определяющего, какие связанные объекты возвращаются при запросе к конкретному объекту в концептуальной модели. В этом примере запрос возвращает единственный объект Contact и все связанные объекты SalesOrderHeader и SalesOrderDetail.
Чтобы указать путь запроса, передайте строковое представление графа объектов методу Include в запросе ObjectQuery. Метод Include можно применить поверх любого запроса Entity Framework : LINQ to Entities , Entity SQL или метода построения запросов.
Пример в этом разделе основан на модели Adventure Works Sales. Чтобы запустить код, используемый в данном разделе, нужно сначала добавить к проекту модель Adventure Works Sales и настроить его для использования платформы Entity Framework. Дополнительные сведения см. в разделе Как использовать мастер моделей EDM (Entity Framework) или Как вручную настроить проект Entity Framework и Как определить модель EDM вручную (Entity Framework).
Пример
В следующем примере указан путь запроса, возвращающий Contact и связанные объекты SalesOrderHeader и SalesOrderDetail.
Using context As New AdventureWorksEntities()
' Define a LINQ query with a path that returns
' orders and items for a contact.
Dim contacts = (From contact In context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails") _
Select contact).FirstOrDefault()
' Execute the query and display information for each item
' in the orders that belong to the contact.
For Each order As SalesOrderHeader In contacts.SalesOrderHeaders
Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber))
Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString()))
Console.WriteLine("Order items:")
For Each item As SalesOrderDetail In order.SalesOrderDetails
Console.WriteLine(String.Format("Product: {0} Quantity: {1}", _
item.ProductID.ToString(), item.OrderQty.ToString()))
Next
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Define a LINQ query with a path that returns
// orders and items for a contact.
var contacts = (from contact in context.Contacts
.Include("SalesOrderHeaders.SalesOrderDetails")
select contact).FirstOrDefault();
// Execute the query and display information for each item
// in the orders that belong to the contact.
foreach (SalesOrderHeader order in contacts
.SalesOrderHeaders)
{
Console.WriteLine(String.Format("PO Number: {0}",
order.PurchaseOrderNumber));
Console.WriteLine(String.Format("Order Date: {0}",
order.OrderDate.ToString()));
Console.WriteLine("Order items:");
foreach (SalesOrderDetail item in order.SalesOrderDetails)
{
Console.WriteLine(String.Format("Product: {0} "
+ "Quantity: {1}", item.ProductID.ToString(),
item.OrderQty.ToString()));
}
}
}
Метод Include возвращает объект запроса, этот метод можно многократно вызывать для объекта ObjectQuery, чтобы включать сущности из нескольких связей, как показано следующем примере.
' Create a SalesOrderHeader query with two query paths,
' one that returns order items and a second that returns the
' billing and shipping addresses for each order.
Dim query As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address")
// Create a SalesOrderHeader query with two query paths,
// one that returns order items and a second that returns the
// billing and shipping addresses for each order.
ObjectQuery<SalesOrderHeader> query =
context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address");
См. также
Задачи
Как выполнить запрос, возвращающий объекты типа сущностей (платформа Entity Framework)
Как переходить по связям с помощью свойств навигации (платформа Entity Framework)
Основные понятия
Загрузка связанных объектов (платформа Entity Framework)
Методы построителя запросов (платформа Entity Framework)
LINQ to Entities
Общие сведения о языке Entity SQL