2010-04-05 16 views
0

例如我想從數據庫得到一樣的數據:如何使用linq的未鏈接結果?

using (ExplorerDataContext context = new ExplorerDataContext()) 
     { 
      ObjectQuery<Store> stores = context.Store; 
      ObjectQuery<ProductPrice> productPrice = context.ProductPrice; 
      ObjectQuery<Product> products = context.Product; 
      res = 
       from store in stores 
       join pp in productPrice 
       on store equals pp.Store 
       join prod in products 
       on pp.Product equals prod 
       select store; 
     } 

此代碼後的結果,因爲上下文不存在,我越不能轉移到一些其他方法。我怎樣才能得到獨立於上下文的未鏈接結果? 謝謝

回答

2

通過對結果調用ToList()來實現查詢。這將運行查詢並將結果轉換爲對象的列表。由於List<T>實施了IEnumerable<T>,如果您已將變量聲明爲IEnumerable<Store>,則此功能仍應起作用。

using (ExplorerDataContext context = new ExplorerDataContext()) 
    { 
     ObjectQuery<Store> stores = context.Store; 
     ObjectQuery<ProductPrice> productPrice = context.ProductPrice; 
     ObjectQuery<Product> products = context.Product; 
     res = 
      (from store in stores 
      join pp in productPrice 
      on store equals pp.Store 
      join prod in products 
      on pp.Product equals prod 
      select store).ToList(); 
    } 

LINQ(對於SQL)通過構建表示查詢的表達式樹來工作。直到查詢實際枚舉(或通過調用像ToList()這樣的方法顯式實現),查詢尚未執行。您需要確保在處理上下文之前執行查詢。根據您所展示的代碼,最快的方法是撥打ToList()。你也許也可以擴展上下文範圍來覆蓋你的用法,但是如果你將數據提供給一個視圖(網頁),這可能不會有效。然而,在其他情況下,這可能是可能的 - 比如只在上下文的using塊中包含查詢的枚舉。

+0

哦,它的工作原理!非常感謝 – mimic 2010-04-06 00:42:53