Welcome

首页 / 软件开发 / LINQ / 深度看点Linq查询与性能解析

深度看点Linq查询与性能解析2011-08-07众人对LINQ查询持有不同的态度,有的说容易实现,有的说难操作,那到底是什么样子呢,笔者特地为此做了一个Linq查询与性能分析,请看下文吧。

Orcas(VS2008&Framework3.5)给我们带来了很多令人兴奋的新特性,尤其是LINQ的引进,可以说方便了一大批开发人员和框架设计人员。过去,当我们使用O/RMapping的一些框架时,最担心的应该是复杂的查询和数据库操作的性能问题,那么LINQ在这个方面给我们带来了什么呢?从LINQ查询开始说起吧。

一:LINQ查询:

一个项目中,对数据库操作最多的应该就是查询,特别是复杂一些的项目,查询往往是从很多张表里取一些数据,“东拼西凑”的呈现给用户。如果不使用O/R Mapping呢,我们处理的方式无非是两种:复杂的SQL语句或者是存储过程。

但是,在使用了O/R Mapping的情况下,为了保证取出的数据是强类型,不得不用多个方法来进行拼凑,麻烦且不说,性能损失是肯定的,那么也就出现了O/R Mapping框架和未封装的ADO.NET一起用的尴尬场面。那么LINQ查询怎么处理的呢?首先我们先来看一些复杂的查询语法。

设计两张表,分别为表示部门(Department)和员工(Employee):

1、 模糊查询:

模糊查询在O/RMapping的框架中是比较难实现的,即使实现,效率也不是很高,LINQ提供了我们丰富的模糊查询的方法,比如我们要在Employee表中查姓张的人,可以这样:

DBDataClassesDataContext dbdata = new DBDataClassesDataContext();
var query = from employee in dbdata.Employees where
employee.EmployeeName.StartsWith("张") select employee;

在实际执行的时候,这句话被转换成了:

SELECT [t0].[EmployeeId], [t0].[DepId], [t0].[EmployeeName],
[t0].[EmployeeSalary] FROM [dbo].[Employee] AS
[t0] WHERE [t0].[EmployeeName] LIKE @p0

这样的SQL语句,这个里面的@p0这个参数在执行的时候加上了“%”,也就是以@p0开头的任何符合条件的记录都被取出来了。这样的方法在LINQ查询中还有Contains、EndsWith等。