Welcome

首页 / 软件开发 / C# / Linq学习(3) 语法结构

Linq学习(3) 语法结构2010-07-12 博客园 飘遥(周振兴)Linq 语法结构

(来自Linq in action)

举个例子实现:

查询以a开头的字符串,按降序输出。

C#代码:

string[] list = { "adobe", "excel", "acer", "query", "async", "xianfen", "apple", "amazon", "player", "best", "wow" };
var result = from word in list
where word.StartsWith("a")
orderby word descending
select word;
result.ToList().ForEach(str => Console.WriteLine(str));

// 输出:

// async
// apple
// amazon
// adobe
// acer

等价的面向对象语法为:

var result = list.Where(str => str.StartsWith("a"))
.OrderByDescending(str => { return str; });

这里 Where 和 OrderByDescending都是IEnumerable<T>的扩展方法,因为数组类型实现了该接口,所以可以直接调用这些这些扩展方法。

这些扩展方法的实现是在Enumerable类型中实现的,因此,更直接的是调用Enumerable类型的静态方法方法:

var result =
Enumerable.OrderByDescending(
Enumerable.Where(
list, str => str.StartsWith("a")), str => { return str; }
);

从这些逆向演化可以看出,查询语法就是一种"语法糖"。前面提到过,编译后运行时版本还是2.0,从这可以看出一些端倪。如果想继续深入了解该实现可以用ILDASM查看IL源代码和反射类库源代码。

result类型为IEnumerable<TElement>或派生自IEnumerable<TElement>接口的类型。