c# - 将表达式<T, bool> 转换为字符串

标签 c# expression dynamic-linq

我需要一种方法来在将来的某个时候重新创建动态生成的报告。长话短说,我需要将特定的 Linq 查询(每个报告不同)存储到数据库中,然后稍后使用动态 Linq 执行查询。

一切都很好,但我找不到将表达式转换为字符串的方法。

如:

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);

应该变成:

"Product.Id > 5 && Product.Warranty != false"

有办法吗?

最佳答案

这可能不是最好/最有效的方法,但它确实有效。

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);

string expBody = ((LambdaExpression)exp).Body.ToString(); 
// Gives: ((x.Id > 5) AndAlso (x.Warranty != False))

var paramName = exp.Parameters[0].Name;
var paramTypeName = exp.Parameters[0].Type.Name;

// You could easily add "OrElse" and others...
expBody = expBody.Replace(paramName + ".", paramTypeName + ".")
                 .Replace("AndAlso", "&&");


Console.WriteLine(expBody);
// Output: ((Product.Id > 5) && (Product.Warranty != False))

关于c# - 将表达式<T, bool> 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4793981/

相关文章:

c# - 美元符号 ($"string") 有什么作用?

c# - 如何部署 visual studio 自定义工具?

python-3.x - 长表达式使 SymPy 崩溃

c# - EF Expression<Func<T, object>> 属性检测

c# - LINQ 动态查询库设置

c# - System.IdentityModel.Selectors.UserNamePasswordValidator 不存在

c# - ASP.NET MVC 表单问题

java - 如何使用 EventHandler javafx 编写 lambda 表达式

C# 动态 LINQ : Select with Sum on dictionary indexer

c# - 动态 Linq - 在运行时设置 orderby 表达式类型