c# - 如何重构linq表达式树

标签 c# linq lambda expression expression-trees

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

最佳答案

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

使用 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 属性使用的语法的详细信息,请参阅 DebugView syntax .

关于c# - 如何重构linq表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55627088/

相关文章:

lambda - 计算素数(流和 lambda)

c# - 获取/设置为不同的类型

c# - jqGrid subGridRowExpanded 功能无法正常工作

python - pandas 使用 if/truth 语句将函数应用于数据框的列

linq - 如何将 linq 结果集作为自定义类型返回

linq - 比较日期,忽略年份 - Linq/Entity Framework

c# - 如何使用方法调用作为参数

c# - 未分配给变量的类实例是否会过早被垃圾回收?

c# - 避免子类 mvvm 中的数据重复

c# 一对多字符串解析帮助使用正则表达式 lambda