将表达式<t,bool =“”>转换为String </t,>

时间:2011-01-25 13:20:20

标签: c# expression dynamic-linq

我需要一种方法来在将来的某个时刻重新创建动态生成的报告。简而言之,我需要将一个特定的linq查询(每个报告不同)存储到数据库中,然后再使用动态Linq执行查询。

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

如:

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

应该成为:

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

有办法吗?

1 个答案:

答案 0 :(得分:42)

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

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))
相关问题