我学习LINQ的时候是直接看MSDN和LINQ team的blog,经常会被里面的一些名词弄混,下面这些名词你都弄懂了吗?
Expression Tree
Expression
Lambda Expression
Query Expression
Query Operator
Expression Tree
和 Expression的区别类似XmlNode和XmlElement的区别。Expression Tree用于表达对IQueryable<T>类型数据源的查询树,是Select/Where/From等多个Query method嵌套,在运行时LINQ2SQL会根据Expression Tree来生成SQL语句。
Expression
确切的说是Expression类,为Expression Tree的每一个节点的基类,并提供了构造不同类型Expression的factory method。在System.Linq.Expression命名空间中提供了多种类型的Expression,经常用到的包括:
Class | Description |
BinaryExpression | 用来表达所有的二元运算,形式为(left) op (right)。如a+b, c && d等。 |
UnaryExpression | 用来表达所有的一元运算,形式为op(operand)。如!a,b++等。 |
ConstantExpression | 用来表达常量或外部变量(不在Expression Tree的控制结构内定义的变量)的定义。 |
ParameterExpression | 用来表达Expression Tree控制结构内的局部变量的定义 |
MethodCallExpression | 用来表达函数的调用 |
MemberExpression | 用来表达属性的访问 |