Linqテクニック3——いつ、どのように事前ローディングを使用しますか?
1914 ワード
通常の状況はあなたのアプリケーションにあります.データを調べ終わると、実体を使って何をするか分かります.
もし注文書を印刷したら、注文書を構成するItemsとProducsの情報が含まれていないことが分かります.プリントの情報は不完全です.だから、照会する時もこれらの情報を読み込む必要があります.
このような場合には、クエリーを事前にロードすることが有用である.追加の情報、エンティティが必要であれば、これらのエンティティデータを事前にロードする必要があります.これは検索回数を節約します.
ちょうどいくつかの間違った観点とは対照的に、EFを使って事前にロードしてもいいです.そして便利です.簡単にInclude()を使って自分の問い合わせを書くことができます.
結果の実行文には、追加の問い合わせは必要ありません.以下のようにします.
このようなクエリは、Include(「Items」)を明確に再使用する必要がなく、Include(「Items.Product」)の使用は、明確に「Items」を含む.
もし注文書を印刷したら、注文書を構成する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」を含む.