2008-09-08 7 views
7

私はこのようなクエリがあります。SQLクエリにLINQを最適化

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

はこれが生成します。私は順序の情報と、それを作成したユーザーを印刷する必要が

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(); 
} 

を注文をもたらすためのSQLクエリと、顧客を連れて来るための各注文のための1つのクエリ。 1つのSQLクエリで注文とその顧客をもたらすようにクエリを最適化することは可能ですか?

おかげ

UDPATE:シロッコの提案により、私はこのようなクエリを変更し、それが動作します。選択クエリは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(); 
    } 
} 

ありがとうございました。

答えて

4

何かを見ています。 Linq2SQLでは、LoadOptionsを使用することができます:More on LoadOptions L2Sに関する1つの非常に奇妙なことは、最初のクエリがデータベースに送られる前にLoadOptionsを設定できることです。

+0

うわー、これは素晴らしかったです。私はこれを実装し、クエリ時間は1.5秒から25秒に短縮されました。 – BastanteCaro

+0

http://stackoverflow.com/questions/11262785/optimizing-repositorys-submitchanges-methodにお答えください。 – Lijo

0

コンパイル済みクエリ

を使用してに見たいと思うかもしれませんEagerLoading他にあなたができることである http://www.3devs.com/?p=3