2010-12-07 97 views
2

我有這樣的LINQ to SQL查詢:如何優化這個linq查詢?

var items = 
    from i in context.Items 
    orderby i.itemId descending 
    select new ItemWithCategories 
    { 
     item = i, 
     categories = (
      from cats in context.categories 
      join ic in context.itemCategories 
       on cats.categoryId equals ic.categoryId 
      where ic.itemId == i.itemId 
      select cats).ToList() 
    }; 

這三個表。我需要加入這些項目的類別,但是有一個表格(多對多)。有沒有更好的做這個查詢?

+1

您是否檢查過生成的sql及其查詢計劃? – 2010-12-07 20:18:39

回答

1

這將產生相同的結果,但更容易閱讀:

var items = 
    from item in context.Items 
    orderby item.itemId descending 
    select new ItemWithCategories 
    { 
     item = item, 
     categories = (
      from itemCategory in item.itemCategories 
      select itemCategory.category).ToList() 
    }; 

看我怎麼刪除的連接語句,但使用的itemitemCategories財產?

0

您擁有的查詢將創建一個對象列表,這些對象將引用查詢(類別),然後在訪問它們時執行它們(如果它們完全相同)。

這可能會導致客戶端和數據庫服務器之間產生大量「喋喋不休」,以及在您的TDS流中重複發送標題數據的額外開銷。

您可能想要考慮在這裏執行連接並展開數據。這隻需要一次查找,代價是複製左側的數據(項目)。

當然,任何優化,關鍵是要測試,測試,測試。