Linqテクニック3——いつ、どのように事前ローディングを使用しますか?

1914 ワード

通常の状況はあなたのアプリケーションにあります.データを調べ終わると、実体を使って何をするか分かります.
もし注文書を印刷したら、注文書を構成するItemsとProducsの情報が含まれていないことが分かります.プリントの情報は不完全です.だから、照会する時もこれらの情報を読み込む必要があります.
このような場合には、クエリーを事前にロードすることが有用である.追加の情報、エンティティが必要であれば、これらのエンティティデータを事前にロードする必要があります.これは検索回数を節約します.
ちょうどいくつかの間違った観点とは対照的に、EFを使って事前にロードしてもいいです.そして便利です.簡単にInclude()を使って自分の問い合わせを書くことができます.
var reprint = (from order in ctx.Orders.Include("Items.Product") 

             where order.Customer.Name == "Fred Blogs"  

                && order.Status == "Unshipped" 

             select order).First();
この照会文の意味は、この顧客の注文にはそれらの「明細」が含まれています.それぞれの「明細」にはそれらの「製品」の情報が含まれています.
結果の実行文には、追加の問い合わせは必要ありません.以下のようにします.
foreach (var item in reprint.Items) 

{ 

    Console.WriteLine("\t{0} {1} = ${2}", 

        item.Quantity, 

        item.Product.Name, 

        item.Cost); 

} 

Console.WriteLine(reprint.TotalCost);
備考:
このようなクエリは、Include(「Items」)を明確に再使用する必要がなく、Include(「Items.Product」)の使用は、明確に「Items」を含む.