46

私は LINQ to Entities (または Entity Framework と呼ばれるものは何でも) を使用するのが初めてで、次のような多くのコードを書いています。

var item = (from InventoryItem item in db.Inventory
            where item.ID == id
            select item).First<InventoryItem>();

次に、そのオブジェクトのメソッドを次のように呼び出します。

var type = item.ItemTypeReference;

また

var orders = item.OrderLineItems.Load();

子または関連オブジェクトを取得します。

DB のプロファイルを作成したり、深く掘り下げたりしていませんが、.Load() または *Reference プロパティを呼び出すと、実際には DB に別の呼び出しを行っていると思います。この場合、最初の LINQ 式でこれらのオブジェクトを取得する方法はありますか?

4

3 に答える 3

65

この記事「クエリ結果の整形」の .Include(string) メソッド参照を使用します。

var item = from InventoryItem item in
              db.Inventory.Include("ItemTypeReference").Include("OrderLineItems")
           where item.ID == id
           select item;

インクルードにもおそらく「sql」スタイルの構文があります。

LINQ-to-SQL から LINQ-to-Entities への移行に関するこの記事も参照してください。

Linq to SQLのこの問題の解決策を探している他の人は、次のことを行う必要があります (DataContext と他のタイプを、あなたが持っているものに置き換えてください)。

using (DataContext db = new DataContext())
{
    DataLoadOptions options = new DataLoadOptions();
    options.LoadWith<InventoryItem>(ii => ii.ItemTypeReference);
    options.LoadWith<InventoryItem>(ii => ii.OrderLineItems);
    db.LoadOptions = options;

    var item = from InventoryItem item in db.Inventory
               where item.ID == id
               select item;
}

これにより、その特定のコンテキストで、親アイテム (InventoryItem) が読み込まれるたびに、LoadWith で指定されたプロパティが読み込まれます。

James と Jesper からの追加の質問への回答として、この質問を確認してください。

于 2008-11-25T00:29:40.117 に答える
0

私の知る限り、silverlight(ドメインサービス)の場合、[Include]属性を適切な場所(メタデータのナビゲーションプロパティ上)に追加するだけで十分ですhttps://stackoverflow.com/a/5332188/413032

于 2013-03-23T14:24:01.860 に答える