Export (0) Print
Expand All

Query Expression Syntax Examples: Navigating Relationships

Navigation properties in the Entity Framework are shortcut properties used to locate the entities at the ends of an association. Navigation properties allow a user to navigate from one entity to another, or from one entity to related entities through an association set. This topic provides examples in query expression syntax of how to navigate relationships through navigation properties in LINQ to Entities queries.

The AdventureWorks Sales Model used in these examples is built from the Contact, Address, Product, SalesOrderHeader, and SalesOrderDetail tables in the AdventureWorks sample database.

The examples in this topic use the following using/Imports statements:


Option Explicit On
Option Strict On
Imports System.Data.Objects
Imports System.Globalization
    

Example

The following example uses the Select method to get all the contact IDs and the sum of the total due for each contact whose last name is "Zhou". The Contact.SalesOrderHeader navigation property is used to get the collection of SalesOrderHeader objects for each contact. The Sum method uses the Contact.SalesOrderHeader navigation property to sum the total due of all the orders for each contact.


Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
Dim contacts As ObjectSet(Of Contact) = context.Contacts

Dim ordersQuery = From contact In contacts _
Where contact.LastName = lastName _
Select New With _
{.ContactID = contact.ContactID, _
.Total = contact.SalesOrderHeaders.Sum(Function(o) o.TotalDue)}

For Each order In ordersQuery
Console.WriteLine("Contact ID: {0} Orders total: {1}", order.ContactID, order.Total)
Next
End Using
    

Example

The following example gets all the orders of the contacts whose last name is "Zhou". The Contact.SalesOrderHeader navigation property is used to get the collection of SalesOrderHeader objects for each contact. The contact's name and orders are returned in an anonymous type.


Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
Dim contacts As ObjectSet(Of Contact) = context.Contacts

Dim ordersQuery = From contact In contacts _
Where contact.LastName = lastName _
Select New With _
{.LastName = contact.LastName, _
.Orders = contact.SalesOrderHeaders}

For Each order In ordersQuery
Console.WriteLine("Name: {0}", order.LastName)
For Each orderInfo In order.Orders

Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}", _
orderInfo.SalesOrderID, orderInfo.OrderDate, orderInfo.TotalDue)
Next

Console.WriteLine("")
Next
End Using
    

Example

The following example uses the SalesOrderHeader.Address and SalesOrderHeader.Contact navigation properties get the collection of Address and Contact objects associated with each order. The last name of the contact, the street address, the sales order number, and the total due for each order to the city of Seattle are returned in an anonymous type.


Dim city = "Seattle"
Using context As New AdventureWorksEntities

Dim orders As ObjectSet(Of SalesOrderHeader) = context.SalesOrderHeaders

Dim ordersQuery = From order In orders _
Where order.Address.City = city _
Select New With { _
.ContactLastName = order.Contact.LastName, _
.ContactFirstName = order.Contact.FirstName, _
.StreetAddress = order.Address.AddressLine1, _
.OrderNumber = order.SalesOrderNumber, _
.TotalDue = order.TotalDue}

For Each orderInfo In ordersQuery
Console.WriteLine("Name: {0}, {1}", orderInfo.ContactLastName, orderInfo.ContactFirstName)
Console.WriteLine("Street address: {0}", orderInfo.StreetAddress)
Console.WriteLine("Order number: {0}", orderInfo.OrderNumber)
Console.WriteLine("Total Due: {0}", orderInfo.TotalDue)
Console.WriteLine("")
Next

End Using
    

Example

The following example uses the Where method to find orders that were made after December 1, 2003, and then uses the order.SalesOrderDetail navigation property to get the details for each order.


Using context As New AdventureWorksEntities
Dim orders As ObjectSet(Of SalesOrderHeader) = context.SalesOrderHeaders

Dim query = _
From order In orders _
Where order.OrderDate >= New DateTime(2003, 12, 1) _
Select order

Console.WriteLine("Orders that were made after December 1, 2003:")
For Each order In query
Console.WriteLine("OrderID {0} Order date: {1:d} ", _
order.SalesOrderID, order.OrderDate)
For Each orderDetail In order.SalesOrderDetails
Console.WriteLine("  Product ID: {0} Unit Price {1}", _
orderDetail.ProductID, orderDetail.UnitPrice)
Next
Next
End Using
    

See Also




Build Date:

2012-10-01
Show:
© 2014 Microsoft