ナビゲーション プロパティを使用してリレーションシップをナビゲートする方法 (Entity Framework)
このトピックでは、ナビゲーション プロパティを使用してリレーションシップをナビゲートする方法について説明します。 For more information, see ナビゲーション プロパティ. この例では、姓が "Zhou" である連絡先のすべての注文を取得します。 Contact.SalesOrderHeader ナビゲーション プロパティは、各連絡先の SalesOrderHeader オブジェクトのコレクションを取得するために使用されます。 The same example is shown using each of the following Entity Framework query technologies:
LINQ to Entities
Entity SQL と ObjectQuery<T>
ObjectQuery<T> のクエリ ビルダー メソッド
このトピックの例には、Adventure Works Sales Model が使用されています。このトピックのコードを実行するには、あらかじめプロジェクトに Adventure Works Sales Model を追加し、Entity Framework を使用するようにプロジェクトを構成しておく必要があります。詳細については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」、または「Entity Framework プロジェクトを手動で構成する方法」、および「Entity Data Model を手動で定義する方法 (Entity Framework)」を参照してください。
例
This is the LINQ to Entities example.
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
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
ObjectSet<Contact> contacts = context.Contacts;
var ordersQuery = from contact in contacts
where contact.LastName == lastName
select new { LastName = contact.LastName, Orders = contact.SalesOrderHeaders };
foreach (var order in ordersQuery)
{
Console.WriteLine("Name: {0}", order.LastName);
foreach (SalesOrderHeader orderInfo in order.Orders)
{
Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}",
orderInfo.SalesOrderID, orderInfo.OrderDate, orderInfo.TotalDue);
}
Console.WriteLine("");
}
}
This is the Entity SQL example.
Using context As New AdventureWorksEntities()
Dim esqlQuery As String = "SELECT c.FirstName, c.SalesOrderHeaders " & _
" FROM AdventureWorksEntities.Contacts AS c where c.LastName = @ln"
Dim query As New ObjectQuery(Of DbDataRecord)(esqlQuery, context)
' Add parameters to the collection.
query.Parameters.Add(New ObjectParameter("ln", "Zhou"))
For Each rec As DbDataRecord In query
' Display contact's first name.
Console.WriteLine("First Name {0}: ", rec(0))
Dim list As List(Of SalesOrderHeader) = TryCast(rec(1), List(Of SalesOrderHeader))
' Display SalesOrderHeader information
' associated with the contact.
For Each soh As SalesOrderHeader In list
Console.WriteLine(" Order ID: {0}, Order date: {1}, Total Due: {2}",
soh.SalesOrderID, soh.OrderDate, soh.TotalDue)
Next
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string esqlQuery = @"SELECT c.FirstName, c.SalesOrderHeaders
FROM AdventureWorksEntities.Contacts AS c where c.LastName = @ln";
ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(esqlQuery, context);
query.Parameters.Add(new ObjectParameter("ln", "Zhou"));
foreach (DbDataRecord rec in query)
{
// Display contact's first name.
Console.WriteLine("First Name {0}: ", rec[0]);
List<SalesOrderHeader> list = rec[1] as List<SalesOrderHeader>;
// Display SalesOrderHeader information
// associated with the contact.
foreach (SalesOrderHeader soh in list)
{
Console.WriteLine(" Order ID: {0}, Order date: {1}, Total Due: {2}",
soh.SalesOrderID, soh.OrderDate, soh.TotalDue);
}
}
}
これは、クエリ ビルダー メソッドの例です。
Dim lastName = "Zhou"
Using context As New AdventureWorksEntities()
' Define a query that returns a nested
' DbDataRecord for the projection.
Dim query As ObjectQuery(Of DbDataRecord) = context.Contacts.Select("it.FirstName, it.LastName, it.SalesOrderHeaders") _
.Where("it.LastName = @ln", New ObjectParameter("ln", lastName))
For Each rec As DbDataRecord In query.Execute(MergeOption.AppendOnly)
' Display contact's first name.
Console.WriteLine("First Name {0}: ", rec(0))
Dim list As List(Of SalesOrderHeader) = TryCast(rec(2), List(Of SalesOrderHeader))
' Display SalesOrderHeader information
' associated with the contact.
For Each soh As SalesOrderHeader In list
Console.WriteLine(" Order ID: {0}, Order date: {1}, Total Due: {2}", _
soh.SalesOrderID, soh.OrderDate, soh.TotalDue)
Next
Next
End Using
string lastName = "Zhou";
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Define a query that returns a nested
// DbDataRecord for the projection.
ObjectQuery<DbDataRecord> query =
context.Contacts.Select("it.FirstName, "
+ "it.LastName, it.SalesOrderHeaders")
.Where("it.LastName = @ln", new ObjectParameter("ln", lastName));
foreach (DbDataRecord rec in
query.Execute(MergeOption.AppendOnly))
{
// Display contact's first name.
Console.WriteLine("First Name {0}: ", rec[0]);
List<SalesOrderHeader> list = rec[2]
as List<SalesOrderHeader>;
// Display SalesOrderHeader information
// associated with the contact.
foreach (SalesOrderHeader soh in list)
{
Console.WriteLine(" Order ID: {0}, " +
"Order date: {1}, Total Due: {2}",
soh.SalesOrderID, soh.OrderDate, soh.TotalDue);
}
}
}
参照
処理手順
方法: クエリ パスを使用して結果を構築する (Entity Framework)
概念
概念モデルに対するクエリ (Entity Framework)
リレーションシップの定義と管理 (Entity Framework)