我知道什么是Lambda表达式。
但我不确定这是否与Expression
相同。这里似乎还有更多要知道的事情。
我正在查看wrapping IQueryable并且使用表达式很多。那么,例如,这里的“表达式”参数还有更多可以在Lambda中想到的吗?
public InterceptedQuery(InterceptingProvider provider, Expression expression)
{
this._provider = provider;
this._expression = expression;
}
答案 0 :(得分:4)
lambda表达式是一个编译器功能,根据上下文编译成两件事之一:
Expression
一旦编译了应用程序,lambda表达式的概念就不存在了,因为它已被转换为上述两个选项之一。
我不确定你的意思
这里的“表达式”参数还有更多内容,而不是Lambda中可以想到的
表达式以可检查的形式封装和表达应用程序逻辑(换句话说,它让您可以看到开发人员根据调用的属性和函数,包含的常量,比较等)编写的内容。这就是查询提供程序(大多数情况下,对象关系映射器,如实体框架)如何获取代码并将其转换为SQL。
答案 1 :(得分:1)
Lambda通常是编译代码,其中Expression表示“抽象语法树”(AST),即。表示代码的数据结构,可以编译为代码。 IQueryable通常在Expression上运行,因为它应该将AST编译为在不同环境中运行的代码,例如SQL服务器,而不仅仅是主机。 IQueryableProviders可以编译为SQL(Linq2Sql),JavaScript,OpenGL着色器(Bling)等等。
如果method参数需要一个正确类型的表达式,C#编译器有时可以将lambda转换为表达式:
void Foo(Expression<Func<int>>) { ... }
...
Foo(() => 3);