Linq in Action学习笔记(第三章)
1. Linq与 language extension的关系
2.Linq 的触发机制-------Lazy evaluation
真正Request的时候才会被执行。
请单步调试下以下两个程序:
static void Main(string[] args)
{
int[] number = { 1, 2, 3 };
var result = from b in number
select Square(b);
//foreach (var r in result)
foreach (var r in result.ToList())
{
Console.WriteLine(r);
}
Console.ReadLine();
}
static double Square(double n)
{
Console.WriteLine("Computing Square(" + n + ")...");
return Math.Pow(n, 2);
}
在foreach (var r in result)的时候,执行的结果是
Console.WriteLine("Computing Square(1)...");
1
Console.WriteLine("Computing Square(2)...");
4
Console.WriteLine("Computing Square(3)...");
9
也就是说,在result里的每个element只有当request的时候才会去执行Square(b)函数,而且是每个元素逐步执行的。
而在foreach (var r in result.tolist())的时候,执行的结果是
Console.WriteLine("Computing Square(1)...");
Console.WriteLine("Computing Square(2)...");
Console.WriteLine("Computing Square(3)...");
1
4
9
这里说明执行的时候,一次性把Square(b)函数执行完,然后再进行循环,这就不是lazy evaluation.
3.Standand Query Operators
4.Standand Query Expression
5.
查询操作符和查询表达式的对应
6.为什么我们需要expression tree.
An expression is an kind of abstraction syntax tree.在计算机科学当中,抽象的语义树代表是一种数据结构,它代表了被解析的源代码。在我们这里,expression tree 是c#编译器在执行Lambda 表达式分析操作的结果。这里的目标是一些代码将分析expression tree来执行各种各样的操作。expression tree.是显现lazy evalution的另一种方式。
posted on 2008-08-23 11:24 Love Fendi 阅读(170) 评论(0) 编辑 收藏 举报