次の方法で共有


方法 : 取得する関連データの量を制御する (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);
}

参照

その他の技術情報

データベースに対してクエリを実行する (LINQ to SQL)