日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Linq延遲加載詳細分析

Linq有很多值得學習的地方,這里我們主要介紹Linq延遲加載,包括介紹LoadWith 方法和AssociateWith方法等方面。

Linq延遲加載

在查詢某對象時,實際上你只查詢該對象。不會同時自動獲取這個對象。這就是Linq延遲加載。

例如,您可能需要查看客戶數據和訂單數據。你最初不一定需要檢索與每個客戶有關的所有訂單數據。其優(yōu)點是你可以使用Linq延遲加載將額外信息的檢索操作延遲到你確實需要檢索它們時再進行。請看下面的示例:檢索出來CustomerID,就根據這個ID查詢出OrderID。

 
 
 
  1. var custs =  
  2. from c in db.Customers  
  3. where c.City == "Sao Paulo"  
  4. select c;  
  5. //上面的查詢句法不會導致語句立即執(zhí)行,僅僅是一個描述性的語句,  
  6. 只有需要的時候才會執(zhí)行它  
  7. foreach (var cust in custs)  
  8. {  
  9. foreach (var ord in cust.Orders)  
  10. {  
  11. //同時查看客戶數據和訂單數據  
  12. }  

語句描述:原始查詢未請求數據,在所檢索到各個對象的鏈接中導航如何能導致觸發(fā)對數據庫的新查詢。

Linq延遲加載:LoadWith 方法

你如果想要同時查詢出一些對象的集合的方法。LINQ to SQL 提供了 DataLoadOptions用于立即加載對象。方法包括:
LoadWith 方法,用于立即加載與主目標相關的數據。
AssociateWith 方法,用于篩選為特定關系檢索到的對象。

使用 LoadWith方法指定應同時檢索與主目標相關的哪些數據。例如,如果你知道你需要有關客戶的訂單的信息,則可以使用 LoadWith 來確保在檢索客戶信息的同時檢索訂單信息。使用此方法可僅訪問一次數據庫,但同時獲取兩組信息。
在下面的示例中,我們通過設置DataLoadOptions,來指示DataContext在加載Customers的同時把對應的Orders一起加載,在執(zhí)行查詢時會檢索位于Sao Paulo的所有 Customers 的所有 Orders。這樣一來,連續(xù)訪問 Customer 對象的 Orders 屬性不會觸發(fā)新的數據庫查詢。在執(zhí)行時生成的SQL語句使用了左連接。

 
 
 
  1. NorthwindDataContext db = new NorthwindDataContext();  
  2. DataLoadOptions ds = new DataLoadOptions();  
  3. ds.LoadWith(p => p.Orders);  
  4. db.LoadOptions = ds;  
  5. var custs = (  
  6. from c in db2.Customers  
  7. where c.City == "Sao Paulo"  
  8. select c);  
  9. foreach (var cust in custs)  
  10. {  
  11. foreach (var ord in cust.Orders)  
  12. {  
  13. Console.WriteLine("CustomerID {0} has an OrderID {1}.",  
  14. cust.CustomerID,  
  15. ord.OrderID);  
  16. }  

語句描述:在原始查詢過程中使用 LoadWith 請求相關數據,以便稍后在檢索到的各個對象中導航時不需要對數據庫進行額外的往返。

Linq延遲加載:AssociateWith方法

使用 AssociateWith 方法指定子查詢以限制檢索的數據量。
在下面的示例中,AssociateWith 方法將檢索的 Orders 限制為當天尚未裝運的那些 Orders。如果沒有此方法,則會檢索所有 Orders,即使只需要一個子集。但是生成SQL語句會發(fā)現生成了很多SQL語句。

 
 
 
  1. NorthwindDataContext db2 = new NorthwindDataContext();  
  2. DataLoadOptions ds = new DataLoadOptions();  
  3. ds.AssociateWith(  
  4. p => p.Orders.Where(o => o.ShipVia > 1));  
  5. db2.LoadOptions = ds;  
  6. var custs =  
  7. from c in db2.Customers  
  8. where c.City == "London"  
  9. select c;  
  10. foreach (var cust in custs)  
  11. {  
  12. foreach (var ord in cust.Orders)  
  13. {  
  14. foreach (var orderDetail in ord.OrderDetails)  
  15. {  
  16. //可以查詢出cust.CustomerID, ord.OrderID, ord.ShipVia,  
  17. //orderDetail.ProductID, orderDetail.Product.ProductName  
  18. }  
  19. }  

語句描述:原始查詢未請求數據,在所檢索到各個對象的鏈接中導航如何以觸發(fā)對數據庫的新查詢而告終。此示例還說明在Linq延遲加載關系對象時可以使用 Assoicate With 篩選它們。


分享題目:Linq延遲加載詳細分析
網頁網址:http://m.5511xx.com/article/dpdspsj.html