LinqExpression:如何从比较评估中获取值

时间:2013-07-28 04:54:36

标签: linq linq-to-sql linq-expressions

我正在尝试将LinqExpression转换为sql语句。例如,在我的Repository基类上,我有一个方法Find接受LinqExpression作为其参数。在Find方法中,我正在调用一个执行以下操作的方法:

var equality = expression as BinaryExpression;
                return equality.Left.Translate() + " = " +
                       equality.Right.Translate();

如何在右侧获取变量的值而不仅仅是变量名,目前我只获取变量名。恩。查找(x => x.ID =变量);如果变量当前设置为7,我需要一种方法来获取值7而不是名称变量。获取存储在变量中的值的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

看看Matt Warren's article LINQ: Building an IQueryable Provider - Part III。它包含Evaluator类的代码,它将内联所有可内联的值。在您的情况下,它会将variable替换为包含值7的ConstantExpression

本系列的其他文章也可能对你感兴趣。

答案 1 :(得分:0)

分别尝试投放到MemberExpressionConstantExpression

  var memberExpression = (MemberExpression) expression.Left;
  var constantExpression = (ConstantExpression) expression.Right;

哦,错过了它是一个变量。然后右操作数应为 ParameterException 类型。但是,为了获得它的价值,你可以使用

 Func<object> getValue = expression.Compile();
 var value = getValue();

请注意,这可能会很慢。