2008-09-08 192 views
7

我有一個查詢,看起來像這樣:優化LINQ to SQL查詢

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查詢爲每個訂單帶來訂單和一個查詢以帶來客戶。是否可以優化查詢,以便將訂單和客戶置於一個SQL查詢中?

感謝

UDPATE:通過希洛可風式的建議,我改變了這樣的查詢和它的作品。只生成一個選擇查詢:

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

別的東西,你能做的就是EagerLoading。在Linq2SQL中,您可以使用LoadOptions:More on LoadOptions 關於L2S的一個非常奇怪的事情是,您只能在將第一個查詢發送到數據庫之前設置LoadOptions。

+0

哇,這太棒了。我實現了這一點,查詢時間從25秒減少到1.5 ..非常感謝。 – BastanteCaro 2011-08-22 12:42:26