Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Properti navigasi dalam Kerangka Kerja Entitas adalah properti pintasan yang digunakan untuk menemukan entitas di akhir asosiasi. Properti navigasi memungkinkan pengguna menavigasi dari satu entitas ke entitas lain, atau dari satu entitas ke entitas terkait melalui kumpulan asosiasi. Topik ini menyediakan contoh dalam sintaks kueri berbasis metode tentang cara menavigasi hubungan melalui properti navigasi di LINQ ke kueri Entitas.
Model Penjualan AdventureWorks yang digunakan dalam contoh ini dibangun dari tabel Kontak, Alamat, Produk, SalesOrderHeader, dan SalesOrderDetail dalam database sampel AdventureWorks.
Contoh dalam topik ini menggunakan pernyataan using
/Imports
berikut:
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using System.Globalization;
using System.Data.EntityClient;
using System.Data.SqlClient;
using System.Data.Common;
Option Explicit On
Option Strict On
Imports System.Data.Objects
Imports System.Globalization
Contoh 1
Contoh berikut dalam sintaks kueri berbasis metode menggunakan SelectMany metode untuk mendapatkan semua pesanan kontak yang nama belakangnya adalah "Zhou". Properti Contact.SalesOrderHeader
navigasi digunakan untuk mendapatkan kumpulan SalesOrderHeader
objek untuk setiap kontak.
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
IQueryable<SalesOrderHeader> ordersQuery = context.Contacts
.Where(c => c.LastName == lastName)
.SelectMany(c => c.SalesOrderHeaders);
foreach (var order in ordersQuery)
{
Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}",
order.SalesOrderID, order.OrderDate, order.TotalDue);
}
}
Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
Dim ordersQuery = context.Contacts _
.Where(Function(c) c.LastName = lastName) _
.SelectMany(Function(o) o.SalesOrderHeaders)
For Each order In ordersQuery
Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}", _
order.SalesOrderID, order.OrderDate, order.TotalDue)
Next
End Using
Contoh 2
Contoh berikut dalam sintaks kueri berbasis metode menggunakan Select metode untuk mendapatkan semua ID kontak dan jumlah total yang jatuh tempo untuk setiap kontak yang nama belakangnya adalah "Zhou". Properti Contact.SalesOrderHeader
navigasi digunakan untuk mendapatkan kumpulan SalesOrderHeader
objek untuk setiap kontak. Metode Sum
menggunakan Contact.SalesOrderHeader
properti navigasi untuk menjumlahkan total yang harus dibayar dari semua pesanan untuk setiap kontak.
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var ordersQuery = context.Contacts
.Where(c => c.LastName == lastName)
.Select(c => new
{
ContactID = c.ContactID,
Total = c.SalesOrderHeaders.Sum(o => o.TotalDue)
});
foreach (var contact in ordersQuery)
{
Console.WriteLine($"Contact ID: {contact.ContactID} Orders total: {contact.Total}");
}
}
Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
Dim ordersQuery = context.Contacts _
.Where(Function(c) c.LastName = lastName) _
.Select(Function(c) New With _
{.ContactID = c.ContactID, _
.Total = c.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
Contoh 3
Contoh berikut dalam sintaks kueri berbasis metode mendapatkan semua pesanan kontak yang nama belakangnya adalah "Zhou". Properti Contact.SalesOrderHeader
navigasi digunakan untuk mendapatkan kumpulan SalesOrderHeader
objek untuk setiap kontak. Nama dan pesanan kontak dikembalikan dalam format anonim.
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var ordersQuery = context.Contacts
.Where(c => c.LastName == lastName)
.Select(c => new { LastName = c.LastName, Orders = c.SalesOrderHeaders });
foreach (var order in ordersQuery)
{
Console.WriteLine($"Name: {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("");
}
}
Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
Dim ordersQuery = context.Contacts _
.Where(Function(c) c.LastName = lastName) _
.Select(Function(o) New With _
{.LastName = o.LastName, _
.Orders = o.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
Contoh 4
Contoh berikut menggunakan SalesOrderHeader.Address
properti navigasi dan SalesOrderHeader.Contact
untuk mendapatkan kumpulan Address
objek dan Contact
yang terkait dengan setiap pesanan. Nama belakang kontak, alamat jalan, nomor pesanan penjualan, dan total yang jatuh tempo untuk setiap pesanan menuju kota Seattle dikembalikan dalam tipe anonim.
string city = "Seattle";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
var ordersQuery = context.SalesOrderHeaders
.Where(o => o.Address.City == city)
.Select(o => new
{
ContactLastName = o.Contact.LastName,
ContactFirstName = o.Contact.FirstName,
StreetAddress = o.Address.AddressLine1,
OrderNumber = o.SalesOrderNumber,
TotalDue = o.TotalDue
});
foreach (var orderInfo in ordersQuery)
{
Console.WriteLine("Name: {0}, {1}", orderInfo.ContactLastName, orderInfo.ContactFirstName);
Console.WriteLine($"Street address: {orderInfo.StreetAddress}");
Console.WriteLine($"Order number: {orderInfo.OrderNumber}");
Console.WriteLine($"Total Due: {orderInfo.TotalDue}");
Console.WriteLine("");
}
}
Dim city = "Seattle"
Using context As New AdventureWorksEntities
Dim ordersQuery = context.SalesOrderHeaders _
.Where(Function(o) o.Address.City = city) _
.Select(Function(o) New With { _
.ContactLastName = o.Contact.LastName, _
.ContactFirstName = o.Contact.FirstName, _
.StreetAddress = o.Address.AddressLine1, _
.OrderNumber = o.SalesOrderNumber, _
.TotalDue = o.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
Contoh 5
Contoh berikut menggunakan Where
metode untuk menemukan pesanan yang dibuat setelah 1 Desember 2003, lalu menggunakan order.SalesOrderDetail
properti navigasi untuk mendapatkan detail untuk setiap pesanan.
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
IQueryable<SalesOrderHeader> query =
from order in context.SalesOrderHeaders
where order.OrderDate >= new DateTime(2003, 12, 1)
select order;
Console.WriteLine("Orders that were made after December 1, 2003:");
foreach (SalesOrderHeader order in query)
{
Console.WriteLine($"OrderID {order.SalesOrderID} Order date: {order.OrderDate:d} ");
foreach (SalesOrderDetail orderDetail in order.SalesOrderDetails)
{
Console.WriteLine($" Product ID: {orderDetail.ProductID} Unit Price {orderDetail.UnitPrice}");
}
}
}
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