LINQ to SQL查询分析
创始人
2024-06-07 01:51:03
0

在向大家详细介绍LINQ to SQL查询之前,首先让大家了解下LINQ to SQL查询数据库中的数据,然后全面介绍LINQ to SQL查询。

LINQ to SQL查询数据库中的数据

1. 虽然数据连接已经被确定并建立,但事实上,在一个查询被执行之前,没有任何数据会被接收。这被称为 lazy(迟缓的)加载或者是 deferred evaluation.(延迟执行),它们在大部分场景中将提高效率。下面代码所包含的查询将寻找伦敦的客户:

  1. Sub Main()  
  2. '使用标准的数据连接字符串  
  3. Dim db As DataContext  
  4. db = New DataContext("Data Source=."sqlexpress; Initial Catalog=Northwind")  
  5. '获取一个用于进行强类型查询的 Table 对象  
  6. Dim Customers As Table(Of Customer)  
  7. Customers = db.GetTable(Of Customer)()  
  8. '将包含具体 SQL 的,LINQ to SQL 生成的日志显示到控制台窗口  
  9. '这仅仅用于调试或理解Linq to Sql是如何工作的  
  10. db.Log = Console.Out  
  11. '查询伦敦的客户  
  12. Dim custs = From customer In Customers _  
  13. Where customer.City = "London" _  
  14. Select customer  
  15. End Sub 

这个LINQ to SQL查询将返回所有来自伦敦的定义于 Customers 表中的客户。它被定义为查询表达式语法,编译器将把它编译为清晰的方法调用语法。同时请注意到,custs 集合的类型并没有被定义,这是一个非常便利的 Visual Basic 9.0 特性,它将允许你依靠编译器推断集合数据类型。特别是当查询将返回一个复合的多属性类型时,这将是一个尤其有用的特性,编译器将自动推断实际的类型而不需要额外的定义操作。

2. 增加下列代码以执行并输出结果:

  1. Sub Main()  
  2. '使用标准的数据连接字符串  
  3. Dim db As DataContext  
  4. db = New DataContext("Data Source=."sqlexpress; Initial Catalog=Northwind")  
  5. '获取一个用于进行强类型查询的 Table 对象  
  6. Dim Customers As Table(Of Customer)  
  7. Customers = db.GetTable(Of Customer)()  
  8. '将包含具体 SQL 的,LINQ to SQL 生成的日志显示到控制台窗口  
  9. '这仅仅用于调试或理解Linq to Sql 是如何工作的  
  10. db.Log = Console.Out  
  11. 'Query for customers in London  
  12. Dim custs = From customer In Customers _  
  13. Where customer.City = "London" _  
  14. Select customer  
  15. For Each cust In custs  
  16. Console.WriteLine("ID={0}, City={1}", cust.CustomerID, cust.City)  
  17. Next  
  18. Console.ReadLine()  
  19. End Sub 

这些LINQ to SQL查询将仅仅在代码需要获取实际数据时才被执行。在那一时刻,一条相应的 SQL 命令被执行并且建立了相应的对象。这个概念被称之为“延迟执行”,它使查询能够冷静地评估并仅当需要结果的情况下才执行 SQL 命令——当即执行将有大量的往返损耗与不必要的对象化开销。

3. 按下F5以调试整个解决方案

4. 按下 ENTER,退出该程序。

调用 Console.ReadLine 方法的目的是防止控制台窗口在执行完毕后立即消失。在以后的步骤中,这一步并不一定都需要。

你将会看到像这个窗口一样的控制台窗口:
屏幕上的第一个部分展示了 Linq 生成并发送 SQL 命令到数据库的全过程。紧接着,你可以看到我们的查询返回的数据。需要注意的是,从数据库中接收的行将被转换为“真正的” CLR 对象,这将在调试器中被证实。

【编辑推荐】

  1. Linq匿名委托类型
  2. Linq异常处理详细介绍
  3. Linq Setting字段描述
  4. Linq数据和对象浅谈
  5. Linq内部执行原理剖析

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...