7

次のようなクエリがあります。

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    DatabaseDataContext db = new DatabaseDataContext();
    return (from o in db.Orders
            orderby o.CreatedDate descending
            select o)
            .Skip(pageIndex * recordCount)
            .Take(recordCount)
            .ToList();
}

注文とそれを作成したユーザーの情報を出力する必要があります。

foreach (var o in FetchLatestOrders(0, 10))
{
    Console.WriteLine("{0} {1}", o.Code, o.Customer.Name);
}

これにより、注文を持ち込むための SQL クエリと、顧客を持ち込むための注文ごとに 1 つのクエリが生成されます。クエリを最適化して、注文と顧客を 1 つの SQL クエリで取得することはできますか?

ありがとう

UDPATE: sirrocco の提案により、クエリをこのように変更したところ、機能しました。1 つの選択クエリのみが生成されます。

public IList<Post> FetchLatestOrders(int pageIndex, int recordCount)
{
    var options = new DataLoadOptions();
    options.LoadWith<Post>(o => o.Customer);
    using (var db = new DatabaseDataContext())
    {
        db.LoadOptions = options;
        return (from o in db.Orders
                orderby o.CreatedDate descending
                select o)
                .Skip(pageIndex * recordCount)
                .Take(recordCount)
                .ToList();
    }
}

sirocoさん、ありがとうございます。

4

3 に答える 3

4

他にできることは EagerLoading です。Linq2SQL では LoadOptions を使用できます: LoadOptionsの詳細 L2S で非常に奇妙な点の 1 つは、最初のクエリがデータベースに送信される前にのみ LoadOptions を設定できることです。

于 2008-09-08T17:33:54.407 に答える
0

コンパイルされたクエリの使用を検討することをお勧めします

http://www.3devs.com/?p=3をご覧ください

于 2008-09-08T17:12:39.777 に答える