您的位置:知识库 » 数据库

走进Linq-Linq to Objects(上)基础篇

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 18:18  阅读: 13402 次  推荐: 3   原文链接   [收藏]  
[1] 走进Linq-Linq to Objects(上)基础篇
[2] 走进Linq-Linq to Objects(上)基础篇

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进Linq-Linq to SQL How do I(1)

走进Linq-Linq to SQL How do I(2)

走进Linq-Linq to SQL How do I(3)

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


C# 3.0里又添加了一大把关键字,硬是造出个“查询表达式”(这又是一个语法糖)的东西来。实际上上面那段方法调用方式的Linq可以改写成这样:

from book in books
where book.Title.StartsWith(“L”)
orderby book.Price ascending
select 
new{key=book.Title,value=book.Price};

貌似很接近SQL,不过看上去总是感觉怪怪的,不过习惯就好,这种语法使用一种查询的风格去写代码,我想也许就是有了这个查询表达式,而不是方法调用的方式写代码,这东西称作语言集成查询才更贴近吧。在内部,C#编译器会将这段代码转换为方法调用。

这种风格初一看还真不好理解,Linq in Action这本书给出了一张图来说明查询表达式的语法:

 

(图中中括号说明是可选的,大括号说明是可以0个或多个)

一个查询表达式是从一个from子句开始的,后面跟着联结,条件过滤,排序,而且还可以是多个,最后以select或者group by结束。这里的from的作用就是引入一个变量,使用这个变量表示遍历跟在in后面的source序列里面的元素。

既然查询表达式最后都可以转换成方法的调用,那我们就来看看它们之间的映射关系吧,不过在C#里面有的方法调用没有对应的查询表达式vb.net里面却有。

GroupBy方法对应着group…by或者group…by…into…,有啥区别呢?group…by后面就不能跟东西了,这个查询表达式也就结束了,而group…by…into…还能继续,into后面跟着的是一个IGrouping对象,已分组了,后面的表达式你就可以利用这个对象干些事情,比如求分组内的和啊等等。ThenBy方法就对应这orderby…,…(排序再排序)Join方法对应的查询表达式比较复杂:join…in…on…equals…join的作用和from一样,引入一个变量,用于表示跟在in后面序列内的对象,on后面跟着联结条件。

不过遗憾的是在C#里并不是所有的查询操作符(就是那些扩展方法)都有对应的查询表达式,所以有的时候你还是要借助方法调用的方式。

从查询表达式的写法上来看,如果比较简单的查询用查询表达式较好,但是复杂的查询,特别有join啊,还有多个from啊查询表达式将非常复杂,所以这个时候还是建议使用方法调用,这样可读性也许更好点。

Linq的理论部分也基本讲完了,本系列后续部分将借助实例讲解,我想可能好点,如果大家有什么更好的建议欢迎提出。

祝大家编程愉快

[第1页][第2页]
3
0
标签:linq objects

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻