LINQ表达式树基础2010-11-27 博客园 甜番薯刚接触LINQ的人往往觉得表达式树很不容易理解。通过这篇文章我希望大家 看到它其实并不像想象中那么难。您只要有普通的LINQ知识便可以轻松理解本文 。表达式树提供一个将可执行代码转换成数据的方法。如果你要在执行代码之 前修改或转换此代码,那么它是非常有价值的。尤其是当你要将C#代码----如 LINQ查询表达式转换成其他代码在另一个程序----如SQL里操作它。但是我在这里颠倒顺序,在文章最后你很容易发现为什么将代码转换到数据 中去很有用。首先我需要提供一点背景知识。让我们开始看看相关的创建表达式 树的简单语法。表达式树的语法考虑下面简单的Lambda表达式:Func<int, int, int> function = (a,b) => a + b;这个语句包含三个部分:一个声明: Func<int, int, int> function一个等号: =一个lambda表达式: (a,b) => a + b;变量function指向两个数字相加的原生可执行代码。上面三步的lambda表达 式表示一个简短的如下的手写方法:public int function(int a, int b)
{
return a + b;
}
上面的方法或lambda表达式都可以这样调用:int c = function(3, 5);当方法调用后,变量c将被设成3+5,即8。上面声明中第一步委托类型Func是在System命名空间中为我们定义好的:public delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);这个代码看上去很复杂,但它在这里只是用来帮我们定义变量function,变 量function赋值为非常简单的两个数字相加的lambda表达式。即使你不懂委托和 泛型,你仍然应该清楚这是一个声明可执行代码变量引用的方法。在这个例子里 它指向一个非常简单的可执行代码。