LINQ解析

目录

LINQ解析

2.使用LINQ查询Objects集合

3 使用LINQ XML查询XML文件

4 查询语句实例

LINQ的好处

1、无需复杂学习过程即可上手

2、编写更少代码即可创建完整应用。

3、更快开发错误更少的应用程序。

4、无需求助奇怪的编程技巧就可合并数据源。

5、让新开发者开发效率更高。


LINQ解析

1、什么是LINQ?

LINQ是语言集成查询的缩写(Language Integrated Query)。做软件开发肯定是离不开数据库的,里面有各种查询语句。LINQ的提出就是为了提供一种跨越各种数据源的统一查询方式-它主要包含4个组件-Linq to Objects,Linq to XML,Linq to DataSet和Linq to SQL.

  • Linq to SQL:可以查询基于关系数据库的数据。微软只实现了SQLServer的查询等操作。其他的第三方也实现了很多。
  • Linq to DataSet: 查询DataSet中的数据,并能对数据进行增删等操作。
  • Linq to XML:该组件可以查询XML文件。
  • Linq to Objects:可以查询集合数据,如数组或List等。

eg:

这是一个最简单的Linq查询的使用方式。可以很方便的对数据进行筛选。查询表达式必须以from子句开头,并且必须以select或者group子句结尾,在其之间,可以包含一个或者多个where语句、orderby语句、join语句。形式类似于SQL语言。下面给出示例:

var queryExp=from s in collection
select s;

2.使用LINQ查询Objects集合



在LINQ出现之前,我们查询数据一般要使用for或者foreach语句,但是这两种方式不如LINQ简洁,如下代码。

可以看到使用它之后,代码更加简洁了。并且还可以添加其他的条件。建议我们都使用它去查询对象。

3 使用LINQ XML查询XML文件


在LINQ出现之前,我们使用XPath来查询XML文件,但是使用XPath必须首先知道其具体结构。而使用LinQ则不需要知道这些,代码更加简洁。下面分别讲解其内容。


代码变的异常简单,只需要一个查询表达式即可。不需要知道文件的路径结构,也不需要过多的if语句。Linq To Sql就不再细说了,本身内容就够一本书了,LinqToDataSet与object类似,不再叙述。

4 查询语句实例



检索一个元素子集以产生一个新序列,但不修改单个元素。然后,查询可以按各种方式对返回的序列进行排序或分组,如下面的示例所示(假定 scores 是 int[]):

如上一个示例所述检索一个元素序列,但是将这些元素转换为具有新类型的对象。例如,查询可以只从数据源中的某些客户记录检索姓氏。或者,查询可以检索完整的记录,再使用它构建另一个内存中对象类型甚至 XML 数据,然后生成最终的结果序列。下面的示例演示了从 int 到 string 的转换。请注意 highScoresQuery 的新类型。

检索有关源数据的单一值,例如:
符合某个条件的元素的数量。

具有最大值或最小值的元素。
符合某个条件的第一个元素,或一组指定元素中的特定值之和。
例如,下面的查询从 scores 整数数组中返回高于 80 的分数的数量。

在上一个示例中,请注意在 Count 方法调用之前的查询表达式两旁使用了括号。另一种表示方式是使用一个新变量来存储具体结果。此技术的可读性更好,因为它将存储查询的变量与存储结果的查询区分开来。

在上一个示例中,查询是在 Count 调用中执行的,因为 Count必须循环访问结果以便确定 highScoresQuery 返回的元素数量。


关于LINQ的技巧网上可能有很多,下面我从大的方面来介绍一下它能给开发团队带来的好处。

LINQ的好处

1、无需复杂学习过程即可上手

   LINQ的最主要的一个好处在于它的重用性。你创建的同一个复杂查询可以应用于众多不同的数据源:活动目录、微软的SQL Server、MySQL或一个Web服务;开发者不用必须不断学习新技术就可以上手使用LINQ。

   实际上LINQ几乎支持你所期望的所有数据源:数据对象、SQL Server数据库、XML和数据集。不过,如果你认为LINQ就支持这些,你就会错失它的真正强大之处。通过使用第三方提供商的LINQ插件,你可以让 它支持大量的其它数据源。其中你可以看到一些诸如活动目录的通用数据源,也可以发现一些诸如RDF等不常见的数据源。

   在以前,如果你要想使用编程环境中的多数技术所不支持的数据源,可能要想尽办法琢磨新编程技巧。在编程过程中的一处修改往往会引来大量的代码修改。而对于 LINQ,你可以在不同的数据源中一直使用相同的查询语句。这一点会大大简化开发过程,尤其对一个新加入项目的程序员,和DBA还不太熟,这时候LINQ 的优势尤为突出。下面我给出一个简单的C#示例。
 
 

String[] QueryString =
    { "One", "Two", "Three", "Four", "Five" };

    要想查找其中长度大于3的字符串,你可以使用以下查询语句:

var ThisQuery = 
    from StringValue
    in QueryString 
    where StringValue.Length > 3
    select StringValue;

   在上例中,ThisQuery是这个查询过程的输出。你无需定义一个真实的类型,因为LINQ可以为你完成这个工作;你只需要使用var作为其数据类型。 在上例的代码中使用了StringValue来存放QueryString中匹配where条件的不同字符串。而这个查询中的select仅告诉从数据源 中选取什么。

   你可以相同的查询从RDF或活动目录中获取数据。如果你有其它数据源,你可以使用相同的代码来获得你想要的数据,是不是很酷?

  不要认为LINQ仅支持微软相关的数据源,实际上对于众多开源数据库它也同样支持。例如,LINQ可以很好的支持MySQL。

   你或许会认为LINQ查询不能处理复杂的查询。上面的例子只是一个入门级的演示,并不代表它的真正能力。LINQ查询和SQL查询一样,可以实现非常复杂的查询功能,如果你需要它完成更复杂的工作,它同样也可以办得到。
 

2、编写更少代码即可创建完整应用。

   最初的时候,当我听到微软说LINQ将可以让开发者编写更少代码时,我也对此将信将疑,因为在此之前我们已经看到过太多言过其实的技术和解决方案。不过当 我开始使用LINQ创建SQL Server的查询语句时,我改变了我的看法。我惊讶的发现,原来需要八行代码完成的查询功能,如果使用LINQ我只需要简单的一行即可实现。

   你的确需要多增加几行代码来创建一个在LINQ查询中使用的数据源对象,但是当你在开发.NET应用程序的时候也必须做同样的工作,因此你并没有损失什么。

   那么要想使用LINQ,你需要做些什么?就如同在Visual Studio中访问数据库一样,LINQ需要开发者提供一个数据提供程序(provider)。这个Provider作为数据源和LINQ之间的中间人, 有了它,LINQ才能对代码重用来获得查询结果。这儿的关键是:如果开发者不需要访问一个定制的数据源,他就不用编写这个Provider的代码。这意味 着你的开发团队成员整体上会编写更少的代码,因为Provider中包含了很多代码可以让别人直接使用。更少的代码意味着更少的出错机会,以及测试部门更 少的工作量。

3、更快开发错误更少的应用程序。

   LINQ让代码更易懂,至少对程序员来说它是如此。它使用的类SQL语法,很多开发者已经非常熟悉。在SQL中你指定那些你需要的内容作为输出,而 LINQ则关心如何根据你指定的Provider来为你获得这个输出。一个简单的编程环境,再加上需要编写更少的代码,毫无疑问你可以在更少的时间内开发 出你的应用程序。

   你开发的LINQ应用程序还将包含更少的错误。创建数据源Provider的开发者已经对自己的程序进行了调试和优化。由于开发者编写更少的代码,而且每行代码基于相同的架构,这样可以很轻松开发出具有更少错误的应用。

   LINQ来自微软的调试功能也让调试过程变得异常容易。只要你愿意,你可以在调试过程中监视每一个查询的每一个细节信息。在这一点上微软还是做的相当不错的。

   当然这也并非完全是优点,使用第三方Provider虽然降低了开发时间,但是也可能让你没法使用全部的LINQ功能。而且如果你使用的第三方Provider不够完善的话,也有带来错误的可能。

   LINQ具有很多方法来帮助开发者创建一个复杂的查询。如果第三方Provider不能支持所有这些方法,那么开发者将不得不绕道而行。因此微软需要创建 一个计划来对这些第三方Provider提供认证,确保Provider的功能是完整的,如果厂商通过了这个认证,则给它一个标志,让开发者在使用它们的 时候做到心中有数。即便如此,我所碰到的最糟糕的第三方Provider也具备大多数开发者创建任何查询所需要的功能。
 

4、无需求助奇怪的编程技巧就可合并数据源。

    LINQ有一个功能会让开发者非常喜欢,即它可以在同一个查询中组合使用来自多个数据源的数据。如果项目需要与其它微软产品和服务进行交互的时候,这个功能尤其有用。

   举个例子来说,如果你想查出在某个办公大楼内工作的所有员工,然后从一个工资数据库中查询这些员工。

   使用LINQ,你可以创建一个简单的查询,把相关数据从活动目录中列出,并把它应用到一个SQL Server数据库查询中。

   同样的,你也可以组合使用一个SQL Server查询和一个MySQL查询,或者你可以将一个Web服务查询增加到一个RDF产品搜索中。如此示例举不胜举。

5、让新开发者开发效率更高。

   对于项目中的新开发者来说存在一个问题,数年来技术已经大幅度的向前发展。当我开始编程的时候,所有需要我做的事情就是编写几行非常容易看懂的BASIC代码。

   但是今天,一个新开发者即使编写一个简单的应用,可能也需要学习很多东西。如果这个开发者不知道对象的最核心秘密,或者忘记了它;创建任何类型的应用类型 都将遭遇失败。即使这个开发者具有充足的经验,一旦加入新的开发项目,也需要投入大量的时间来了解新的编程环境之间的细微差别。尽管LINQ不会解决这儿 的所有问题,但是它肯定有所帮助。

   LINQ可以让一个新开发者更快的工作。如果一个新开发者能够在一两天内做出一些有趣和有用的东西,他会有一种满足感,从而会更会去更高效的工作。高效的 开发者往往可以最更少的时间内做出软件。其实这儿并没有什么秘密,LINQ简单的移除了一些复杂的编程工作,而交给了Provider来完成那些工作。开 发者所需要知道的东西就是它可以输出什么,而并非如何得到它。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值