方法 : 取得する関連データの量を制御する (LINQ to SQL)
メイン ターゲットと一緒にどの関連データを取得するかを指定するには、LoadWith メソッドを使用します。 たとえば、顧客の注文に関する情報が必要になることがわかっている場合は、LoadWith を使用して、顧客情報と同時に注文情報を取得できます。 この方法によって、データベースへの 1 回のアクセスで 2 種類の情報セットを両方とも取得できます。
メモ |
---|
メイン ターゲットである顧客に関連して注文データも取得する場合など、クエリのメイン ターゲットに関連するデータを取得するには、クロス積を 1 つの大きな投影として取得する方法もあります。ただし、多くの場合、この方法には欠点があります。たとえば、この結果は単なる射影であり、エンティティではないため、LINQ to SQL で変更して永続化することはできません。また、不要なデータが大量に取得される可能性もあります。 |
使用例
次の例では、クエリを実行すると、ロンドンに住んでいるすべての Customers のすべての Orders が取得されます。 その結果、それ以降 Customer オブジェクトの Orders プロパティにアクセスしても、新しいデータベース クエリは実行されません。
Dim db As New Northwnd("c:\northwnd.mdf")
Dim dlo As DataLoadOptions = New DataLoadOptions()
dlo.LoadWith(Of Customer)(Function(c As Customer) c.Orders)
db.LoadOptions = dlo
Dim londonCustomers = _
From cust In db.Customers _
Where cust.City = "London" _
Select cust
For Each custObj In londonCustomers
Console.WriteLine(custObj.CustomerID)
Next
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;
var londonCustomers =
from cust in db.Customers
where cust.City == "London"
select cust;
foreach (var custObj in londonCustomers)
{
Console.WriteLine(custObj.CustomerID);
}