如何重建linq表达式树

时间:2019-04-11 07:37:36

标签: c# linq lambda expression expression-trees

如何检查linq表达式树,以便可以通过语句(使用System.Linq.Expressions.Expression方法)重建语句?我正在使用VS17中的DebugView来可视化表达式,但是阅读起来不太方便。也许有更好的选择?

1 个答案:

答案 0 :(得分:0)

(免责声明:我是有关图书馆的作者。)

使用ExpressionTreeToString上的NuGet库,您可以在表达式上调用ToString扩展方法:

// using ExpressionToString
Expression<Func<string, int, string>> expr = (s, i) => $"{s}, {i}";    
Console.WriteLine(expr.ToString("Factory methods"));

并返回如下输出:

// using static System.Linq.Expressions.Expression

Lambda(
    Call(
        typeof(string).GetMethod("Format"),
        Constant("{0}, {1}"), s,
        Convert(i,
            typeof(object)
        )
    ),
    var s = Parameter(
        typeof(string),
        "s"
    ),
    var i = Parameter(
        typeof(int),
        "i"
    )
)

有关DebugView属性使用的语法的详细信息,请参见Debugging Expression Trees in Visual Studio