LinqDataLoadOptions描述

Linq DataLoadOptions限制

Linq to sql对Linq DataLoadOptions的使用是有限制的,它只支持1个1对多的关系。一个顾客可能有多个订单,一个订单可能有多个详细订单:

 
 
 
  1. DataLoadOptions options = new DataLoadOptions();  
  2. options.LoadWith(c => c.Orders);  
  3. options.LoadWith(o => o.Order_Details);  
  4. ctx.LoadOptions = options;  
  5. IEnumerable customers = ctx.Customers.ToList(); 

这样的语句执行后会导致下面的SQL执行N次(参数不同):

 
 
 
  1. SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], 
    [t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight], [t0].
    [ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion], [t0].
    [ShipPostalCode], [t0].[ShipCountry], [t1].[OrderID] AS [OrderID2], [t1].
    [ProductID], [t1].[UnitPrice], [t1].[Quantity], [t1].[Discount], (  
  2. SELECT COUNT(*)  
  3. FROM [dbo].[Order Details] AS [t2]  
  4. WHERE [t2].[OrderID] = [t0].[OrderID]  
  5. ) AS [count]  
  6. FROM [dbo].[Orders] AS [t0]  
  7. LEFT OUTER JOIN [dbo].[Order Details] AS [t1] ON [t1].[OrderID] = [t0].[OrderID]  
  8. WHERE [t0].[CustomerID] = @x1  
  9. ORDER BY [t0].[OrderID], [t1].[ProductID]  
  10. -- @x1: Input StringFixedLength (Size = 5Prec = 0Scale = 0) [ALFKI] 

而对于多对1的关系,Linq to sql对于Linq DataLoadOptions没有限制:

 
 
 
  1. DataLoadOptions options = new DataLoadOptions();  
  2. options.LoadWith(c => c.Category);  
  3. options.LoadWith(c => c.Order_Details);  
  4. options.LoadWith(o => o.Order);  
  5. ctx.LoadOptions = options;  
  6. IEnumerable products = ctx.Products.ToList(); 

由于多个产品对应1个分类,多个详细订单对应1个订单,只有产品和详细订单才是多对1的关系,所以也只会有1次SQL(不过这样的操作还是少执行为妙,消耗太大了)

 
 
 
  1. SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].
    [CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].
    [UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].
    [Discontinued], [t3].[OrderID], [t3].[ProductID] AS [ProductID2], [t3].
    [UnitPrice] AS [UnitPrice2], [t3].[Quantity], [t3].[Discount], [t4].
    [OrderID] AS [OrderID2], [t4].[CustomerID], [t4].[EmployeeID], [t4].
    [OrderDate], [t4].[RequiredDate], [t4].[ShippedDate], [t4].[ShipVia], 
    [t4].[Freight], [t4].[ShipName], [t4].[ShipAddress], [t4].[ShipCity], 
    [t4].[ShipRegion], [t4].[ShipPostalCode], [t4].[ShipCountry], (  
  2. SELECT COUNT(*)  
  3. FROM [dbo].[Order Details] AS [t5]  
  4. INNER JOIN [dbo].[Orders] AS [t6] ON [t6].[OrderID] = [t5].[OrderID]  
  5. WHERE [t5].[ProductID] = [t0].[ProductID]  
  6. ) AS [count], [t2].[test], [t2].[CategoryID] AS [CategoryID2], [t2].
    [CategoryName], [t2].[Description], [t2].[Picture]  
  7. FROM [dbo].[Products] AS [t0]  
  8. LEFT OUTER JOIN (  
  9. SELECT 1 AS [test], [t1].[CategoryID], [t1].[CategoryName], [t1].
    [Description], [t1].[Picture]  
  10. FROM [dbo].[Categories] AS [t1]  
  11. ) AS [t2] ON [t2].[CategoryID] = [t0].[CategoryID]  
  12. LEFT OUTER JOIN ([dbo].[Order Details] AS [t3]  
  13. INNER JOIN [dbo].[Orders] AS [t4] ON [t4].[OrderID] = [t3].
    [OrderID]) ON [t3].[ProductID] = [t0].[ProductID]  
  14. ORDER BY [t0].[ProductID], [t2].[CategoryID], [t3].[OrderID] 

【编辑推荐】

  1. Linq结果集形状概述
  2. Linq存储过程返回详解
  3. Linq调用LoadProducts方法
  4. Linq使用数据表简单描述
  5. Linq对象引用简单介绍

网页题目:LinqDataLoadOptions描述
本文路径:http://www.shufengxianlan.com/qtweb/news38/442638.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联