3

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

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

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

4

2 回答 2

1

查看Matt Warren 的文章LINQ:构建 IQueryable 提供程序 - 第 III 部分。它包含Evaluator类的代码,它将内联所有可以内联的值。在您的情况下,它将替换variableConstantExpression包含值 7 的 a。

该系列中的其他文章可能也会引起您的兴趣。

于 2013-07-28T10:39:56.193 回答
0

尝试分别转换为MemberExpressionConstantExpression

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

哦,错过了它是一个变量。那么正确的操作数应该是ParameterException类型。但是,要获得它的价值,您可以使用

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

请注意,这可能会很慢。

于 2013-07-28T10:15:07.213 回答