1

我可以轻松构建任何 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()();

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

4

1 回答 1

5

例子:

  • 您正在根据您事先不知道的模型的反射构建查询
  • 您正在根据输入构建查询,即解析字符串"(a.b + c) * 7"
  • 您正在将多个表达式组合成一个表达式(可能是访问者模式)
  • 您正在做无法通过 lambda 有效表达的事情,即语句体、成员分配等(在 .NET 4.0 中可用,但不能通过 lambda 编译器)
  • 您正在使用没有 lambda 编译器的语言/版本
  • 您希望对 lambda 构造进行细粒度控制(即什么是常量,捕获什么等)
  • 你只想了解这一切是如何运作的
于 2012-04-24T09:14:02.893 回答