LINQ to SQL查询分析

开发 后端
这里介绍LINQ to SQL查询将返回所有来自伦敦的定义于 Customers 表中的客户。它被定义为查询表达式语法,编译器将把它编译为清晰的方法调用语法。

在向大家详细介绍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内部执行原理剖析
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-14 10:09:26

LINQ查询结果

2009-09-08 13:16:01

Linq to SQL

2009-09-09 18:03:47

LINQ to SQL

2009-09-18 14:33:37

LINQ to SQLSQL命令

2009-09-17 16:46:34

Linq to sql

2009-09-18 15:15:12

LINQ to SQL

2009-09-17 18:05:15

linq to sql

2009-09-15 14:58:26

Linq查询本质

2009-09-16 15:41:45

LINQ查询XML文档

2009-09-14 18:53:27

LINQ查询

2009-09-18 16:46:15

LINQ查询句法

2009-09-16 10:48:32

LINQ查询操作

2009-09-17 16:20:43

Linq to sql

2009-09-14 17:03:32

LINQ模糊查询

2009-09-17 17:03:13

LINQ动态查询

2009-09-08 14:34:42

Linq to SQL

2009-09-17 08:47:00

Linq查询

2009-09-16 09:23:14

LINQ To SQL

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2009-09-16 10:08:06

LINQ查询
点赞
收藏

51CTO技术栈公众号