Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换表达式<;T、 布尔>;串_C#_Expression_Dynamic Linq - Fatal编程技术网

C# 转换表达式<;T、 布尔>;串

C# 转换表达式<;T、 布尔>;串,c#,expression,dynamic-linq,C#,Expression,Dynamic Linq,我需要一种在将来某个时候重新创建动态生成的报告的方法。长话短说,我需要将一个特定的linq查询(每个报表都不同)存储到数据库中,然后稍后使用动态linq执行查询 这很好,但我找不到将表达式转换为字符串的方法 例如: Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false); 有办法吗?这可能不是最好/最有效的方法,但确实有效 表达式exp=(x

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

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

例如:

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

有办法吗?

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

表达式exp=(x)=>(x.Id>5&&x.保修!=false);
字符串expBody=((LambdaExpression)exp.Body.ToString();
//给出:((x.Id>5)和(x.Warranty!=假))
var paramName=exp.Parameters[0].Name;
var paramTypeName=exp.Parameters[0]。Type.Name;
//您可以轻松添加“OrElse”和其他。。。
expBody=expBody.Replace(paramName+”,paramTypeName+“)
.替换(“AndAlso”、“AND&”);
控制台写入线(expBody);
//输出:((Product.Id>5)和&(Product.Warranty!=False))

我想你是在问
表达式,我已经修改了你的问题。这与这个问题大致相同:是的,没错,我遗漏了func部分。也许这会有所帮助:@leppie:ToString()显然是从反射返回元数据,而不是lambda表达式的实际字符串表示形式。
"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))