我需要一种方法来在将来的某个时刻重新创建动态生成的报告.简而言之,我需要将特定的linq查询(每个报告不同)存储到数据库中,然后使用动态Linq执行查询.
这一切都很好,但我找不到将表达式转换为字符串的方法.
如:
Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false);
Run Code Online (Sandbox Code Playgroud)
应成为:
"Product.Id > 5 && Product.Warranty != false"
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
The*_*Sky 43
这可能不是最好/最有效的方法,但它确实有效.
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13352 次 |
| 最近记录: |