iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Linq如何实现延迟加载
  • 916
分享到

Linq如何实现延迟加载

2023-06-17 22:06:09 916人浏览 独家记忆
摘要

小编给大家分享一下Linq如何实现延迟加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linq延迟加载在查询某对象时,实际上你只查询该对象。不会同时自动获取这个

小编给大家分享一下Linq如何实现延迟加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Linq延迟加载

在查询某对象时,实际上你只查询该对象。不会同时自动获取这个对象。这就是Linq延迟加载。

例如,您可能需要查看客户数据和订单数据。你最初不一定需要检索与每个客户有关的所有订单数据。其优点是你可以使用Linq延迟加载将额外信息的检索操作延迟到你确实需要检索它们时再进行。请看下面的示例:检索出来CustomerID,就根据这个ID查询出OrderID。

var custs =  from c in db.Customers  where c.City == "Sao Paulo"  select c;  //上面的查询句法不会导致语句立即执行,仅仅是一个描述性的语句,  只有需要的时候才会执行它  foreach (var cust in custs)  {  foreach (var ord in cust.Orders)  {  //同时查看客户数据和订单数据  }  }

语句描述:原始查询未请求数据,在所检索到各个对象的链接中导航如何能导致触发对数据库的新查询。

Linq延迟加载:LoadWith 方法

你如果想要同时查询出一些对象的集合的方法。LINQ to sql 提供了 DataLoadOptions用于立即加载对象。方法包括:
LoadWith 方法,用于立即加载与主目标相关的数据。
AssociateWith 方法,用于筛选为特定关系检索到的对象。

使用 LoadWith方法指定应同时检索与主目标相关的哪些数据。例如,如果你知道你需要有关客户的订单的信息,则可以使用 LoadWith 来确保在检索客户信息的同时检索订单信息。使用此方法可仅访问一次数据库,但同时获取两组信息。
在下面的示例中,我们通过设置DataLoadOptions,来指示DataContext在加载Customers的同时把对应的Orders一起加载,在执行查询时会检索位于Sao Paulo的所有 Customers 的所有 Orders。这样一来,连续访问 Customer 对象的 Orders 属性不会触发新的数据库查询。在执行时生成的SQL语句使用了左连接。

NorthwindDataContext db = new NorthwindDataContext();  DataLoadOptions ds = new DataLoadOptions();  ds.LoadWith<Customer>(p => p.Orders);  db.LoadOptions = ds;  var custs = (  from c in db2.Customers  where c.City == "Sao Paulo"  select c);  foreach (var cust in custs)  {  foreach (var ord in cust.Orders)  {  Console.WriteLine("CustomerID {0} has an OrderID {1}.",  cust.CustomerID,  ord.OrderID);  }  }

语句描述:在原始查询过程中使用 LoadWith 请求相关数据,以便稍后在检索到的各个对象中导航时不需要对数据库进行额外的往返。

Linq延迟加载:AssociateWith方法

使用 AssociateWith 方法指定子查询以限制检索的数据量。
在下面的示例中,AssociateWith 方法将检索的 Orders 限制为当天尚未装运的那些 Orders。如果没有此方法,则会检索所有 Orders,即使只需要一个子集。但是生成SQL语句会发现生成了很多SQL语句。

NorthwindDataContext db2 = new NorthwindDataContext();  DataLoadOptions ds = new DataLoadOptions();  ds.AssociateWith<Customer>(  p => p.Orders.Where(o => o.ShipVia > 1));  db2.LoadOptions = ds;  var custs =  from c in db2.Customers  where c.City == "London"  select c;  foreach (var cust in custs)  {  foreach (var ord in cust.Orders)  {  foreach (var orderDetail in ord.OrderDetails)  {  //可以查询出cust.CustomerID, ord.OrderID, ord.ShipVia,  //orderDetail.ProductID, orderDetail.Product.ProductName  }  }  }

语句描述:原始查询未请求数据,在所检索到各个对象的链接中导航如何以触发对数据库的新查询而告终。此示例还说明在Linq延迟加载关系对象时可以使用 Assoicate With 筛选它们。

以上是“Linq如何实现延迟加载”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Linq如何实现延迟加载

本文链接: https://www.lsjlt.com/news/293745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linq如何实现延迟加载
    小编给大家分享一下Linq如何实现延迟加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Linq延迟加载在查询某对象时,实际上你只查询该对象。不会同时自动获取这个...
    99+
    2023-06-17
  • AngularJS如何使用ocLazyLoad实现js延迟加载
    这篇文章主要介绍AngularJS如何使用ocLazyLoad实现js延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!开发一个系统遇到了一个问题,用angular路由一个htm...
    99+
    2022-10-19
  • Javascript中如何实现图片的延迟加载
    这篇文章主要介绍Javascript中如何实现图片的延迟加载,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Javascript之图片的延迟加载的实例详解作用:保证页面打开的速度(3s...
    99+
    2022-10-19
  • Thymeleaf数据延迟加载怎么实现
    这篇文章主要介绍“Thymeleaf数据延迟加载怎么实现”,在日常操作中,相信很多人在Thymeleaf数据延迟加载怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Th...
    99+
    2022-10-19
  • Hibernae的延迟加载如何理解
    今天给大家介绍一下Hibernae的延迟加载如何理解。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。Hibernae 的延迟加载是一个非常常用的技术,实体的集合...
    99+
    2023-06-17
  • LINQ如何实现子查询和延迟执行编程
    这篇文章将为大家详细讲解有关LINQ如何实现子查询和延迟执行编程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。LINQ子查询 LINQ子查询是一个包含了另外一个查询的Lambda表达式的查询. 以下的例子...
    99+
    2023-06-17
  • Angular实现预加载延迟模块的方法
    Angular实现预加载延迟模块的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!在使用路由延迟加载中,我们介绍了如何使...
    99+
    2022-10-18
  • C#在MEF框架中实现延迟加载部件
    在MEF的宿主中,当我们通过Import声明导入的对象时,组装(Compose)的时候会创建该对象。例如: interface ILogger { v...
    99+
    2022-11-13
  • 如何在android中获取焦点延迟加载
    如何在android中获取焦点延迟加载?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。package com.longmaster.iptv.healt...
    99+
    2023-05-30
    android
  • 如何使用路由延迟加载Angular模块
    这篇文章主要介绍了如何使用路由延迟加载Angular模块,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Angular 非常模块化,模块化的一...
    99+
    2022-10-19
  • C#在MEF框架中怎么实现延迟加载部件
    这篇文章主要介绍“C#在MEF框架中怎么实现延迟加载部件”,在日常操作中,相信很多人在C#在MEF框架中怎么实现延迟加载部件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#在MEF框架中怎么实现延迟加载部件...
    99+
    2023-07-02
  • 举例讲解iOS中延迟加载和上拉刷新/下拉加载的实现
    lazy懒加载(延迟加载)UITableView 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜...
    99+
    2022-06-02
    iOS 加载
  • CSS属性实现响应式图片延迟加载的方法
    CSS属性实现响应式图片延迟加载的方法在网页开发中,经常会遇到需要加载大量图片的情况,特别是在移动设备上。为了提高页面的加载速度和用户体验,延迟加载(lazy loading)图像成为一种常见的优化方法。延迟加载是指在页面加载时,只加载可见...
    99+
    2023-11-18
    响应式 延迟加载 CSS属性
  • 使用.net core 自带DI框架实现延迟加载功能
    在某些情况,我们希望能延迟一个依赖的初始化。如果使用的是autofac,我们可以通过注入Lazy来实现。 我们对 autofac GitHub上提供的一个例子进行进行简单改造,跑起来...
    99+
    2023-02-17
    .net core 延迟加载 .net core DI框架
  • 如何实现Redis延迟队列
    这期内容当中小编将会给大家带来有关如何实现Redis延迟队列,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。延迟队列,顾名思义它是一种带有延迟功能的消息队列。那么,是在什么...
    99+
    2022-10-18
  • Redis如何实现延迟队列
    目录Redis实现延迟队列Redis延迟队列Redis实现延时队列的优化方案延时队列的应用延时队列的实现总结Redis实现延迟队列 Redis延迟队列 Redis 是通过有序集合(ZSet)的方式来实现延迟消息队列的,Z...
    99+
    2023-04-28
    Redis延迟队列 Redis实现延迟队列 Redis队列
  • jQuery如何实现延时加载功能
    这篇文章将为大家详细讲解有关jQuery如何实现延时加载功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery延时加载功能$(document).ready(fu...
    99+
    2022-10-19
  • LINQ XML树加载怎么实现
    本篇内容介绍了“LINQ XML树加载怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!LINQ XML树加载通过XElement类,有...
    99+
    2023-06-17
  • SSIS中如何实现延迟验证
    这篇文章给大家分享的是有关SSIS中如何实现延迟验证的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。验证是一个事件,该事件在Package执行时,第一个被触发,验证能够避免SSIS...
    99+
    2022-10-18
  • 如何实现一个延迟队列
    本篇内容介绍了“如何实现一个延迟队列”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!延迟队列定义首先,队列这...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作