构建Linq表达式

时间:2012-04-24 09:06:17

标签: 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()();

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

1 个答案:

答案 0 :(得分:5)

示例:

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