LINQ – 使用DataLoadOptions 提高LINQ to SQL 查询性能

zz/2023/6/3 15:54:23
LINQ – 使用DataLoadOptions 提高LINQ to SQL 查询性能
EntLib.com开源小组发表,http://www.EntLib.com,2008-7-2
LINQ to SQL 提供了 DataLoadOptions用于立即加载对象,避免往返访问数据库,提高查询性能。方法包括:
LoadWith 方法,用于立即加载与主目标相关的数据。
AssociateWith 方法,用于筛选为特定关系检索到的对象。
如下LINQ to SQL代码示例:
            OrderDataContext orderDC;
            orderDC = new OrderDataContext();
            orderDC.Log = Console.Out;
            DataLoadOptions dataLoadOption = new DataLoadOptions();
            dataLoadOption.LoadWith<Order>(r => r.Order_Details);
            orderDC.LoadOptions = dataLoadOption;
            var query = from ord in orderDC.Orders
                        select ord;
            grdOrder.DataSource = query;
            grdOrderDetail.DataSource = grdOrder.DataSource;
            grdOrderDetail.DataMember = "Order_Details";
通过使用LoadWith 方法指定应同时检索与主目标Order相关的Order Detail 数据,这样后续的查询方法仅访问一次数据库,并可同时获取Order、Order Detail 的所有信息。
如下是输出的SQL脚本:
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], (
    SELECT COUNT(*)
    FROM [dbo].[Order Details] AS [t2]
    WHERE [t2].[OrderID] = [t0].[OrderID]
    ) AS [value]
FROM [dbo].[Orders] AS [t0]
LEFT OUTER JOIN [dbo].[Order Details] AS [t1] ON [t1].[OrderID] = [t0].[OrderID]
ORDER BY [t0].[OrderID], [t1].[ProductID]
使用 AssociateWith 方法指定子查询以限制检索的数据量。
在下面的示例中,AssociateWith 方法将检索的 Orders 限制为当天尚未装运的那些 Orders。如果没有此方法,则会检索所有 Orders,即使只需要一个子集。
DataLoadOptions dlo = new DataLoadOptions();
dlo.AssociateWith<Customer>(c => c.Orders.Where(p => p.ShippedDate != DateTime.Today));
db.LoadOptions = dlo;
var custOrderQuery =
from cust in db.Customers
where cust.City == "London"
select cust;

转载于:https://www.cnblogs.com/entlibforum/archive/2008/07/02/1233796.html

http://www.ngui.cc/zz/483605.html

相关文章

javascript window.open

一、window.open()支持环境&#xff1a;JavaScript1.0/JScript1.0/Nav2/IE3/Opera3二、基本语法&#xff1a;window.open(pageURL,name,parameters) 其中&#xff1a;pageURL 为子窗口路径 name 为子窗口句柄 parameters 为窗口参数(各参数用逗号分隔) 三、示例&#xff1a;<…

基于JQuery框架的AJAX

基于JQuery框架的AJAX/jquery这个类库相当不错...简单..功能还强大在JQuery中&#xff0c;AJAX有三种实现方式&#xff1a;$.ajax(),$.post,$.get()。XHTML(主要):<div id"result" style"background:orange;border:1px solid red;width:300px;height:400px;&…

AjaxPro使用说明

AjaxPro使用说明 1 目录 2 修改历史纪录 3 1、什么是Ajax 4 &#xff12;、为什么使用Ajax 4 &#xff13;、Ajax应用场景 4 &#xff14;、Ajax开发框架 5 5、AjaxPro说明 6 6、AjaxPro实例说明 6 2.1、添加AjaxPro.dll应用 6 2.2、配…

好久没写了

7月8号&#xff0c;交了80快面试费后就拿到录取通知书。同样交钱&#xff0c;研究生院怎么寄都不愿意寄。别人都是ems寄的&#xff0c;怎么我得自己去拿&#xff1f;考研时&#xff0c;好歹有份挂号信呢。谁知道呢&#xff0c;不管了&#xff0c;花了经历、时间、money&#xf…

如何用图片进行演示

在幻灯片上写满文字是一种费力不讨好的设计&#xff0c;也没有一个观众能够记住你上面的那些数据及文字。而用图片来进行演讲能够达到更好的沟通效果&#xff0c;也能够产生更大的视觉冲击力。本文将探讨使用图片来安排幻灯片版面时所涉及的几个基本原则。 在幻灯片的演示中&am…

有段时间没更新了。。。放上我在做的东东的截图

转载于:https://www.cnblogs.com/Reaper1129/archive/2008/07/19/1246454.html

记忆曲线

根据艾宾浩斯遗忘曲线确定最佳复习时间(初记后1天,3天,6天,8天,9天)科学复习记忆,可以最大程度的提高背单词效率,并最终形成牢固记忆. 艾宾浩斯记忆曲线背单词今天看到一个17天搞定GRE单词&#xff0c;满有趣&#xff0c;借鉴一下&#xff0c;时间表先做到7的&#xff0c;不过…

学习进行中,快over了

紧张而无趣的半个月就要结束了。这几天在领导们的关怀下&#xff0c;改善了一下伙食。越发觉得无趣&#xff0c;无精打采的&#xff0c;没兴趣学习&#xff0c;只得的无奈地等待着归期。日子怎么打发&#xff0c;就成了难题。 昨天去买了娃娃&#xff0c;也就是公仔啦&#xff…

一路为你走来

一路为你走来 ——代腾飞 2008年7月28日 于成都 一路为你走来&#xff0c;我激情澎湃 你的生活是那么的多姿多彩 我却只能独自一人黯然发呆 只奈何我为你舞弄千姿百态 你却依然把我抛向九霄云外 我虽然为你相思成灾 你却还是当我不存在 我为你倾尽我的情怀 却得不到你半点尘…

C# TabControl中Tab放於左邊並正常顯示TabText(

///<summary>///構造函數 ///</summary>publicTabL() { InitializeComponent(); TabSet(); tabLeft.DrawItem newDrawItemEventHandler(tabLeft_DrawItem); } ///<summary>///設定控件…