构建Linq表达式

tec*_*man 1 c# linq

我可以轻松地构建任何linq表达式而无需使用Expression工厂方法.例如:

Func<int, string> f = i =>
{
    var result = i.ToString();
    //... rest of the code
    return result;
};

Expression<Func<string>> f2 = () => f(123);
var s = f2.Compile()();
Run Code Online (Sandbox Code Playgroud)

通过调用工厂方法手动构建表达式有什么好处?

Mar*_*ell 5

例子:

  • 您正在基于您事先不知道的模型的反射来构建查询
  • 您正在基于输入构建查询,即解析字符串 "(a.b + c) * 7"
  • 你正在将多个表达式组合成一个表达式(访客模式,也许)
  • 你正在做的事情不能通过lambdas有效表达,即语句体,成员赋值等(在.NET 4.0中可用,但不能通过lambda编译器)
  • 您正在使用没有lambda编译器的语言/版本
  • 你想要对lambda构造进行细粒度的控制(即什么是常量,什么是捕获等)
  • 你只想了解它是如何运作的