我正在尝试将LinqExpression转换为sql语句。例如,在我的Repository基类上,我有一个方法Find接受LinqExpression作为其参数。在Find方法中,我正在调用一个执行以下操作的方法:
var equality = expression as BinaryExpression;
return equality.Left.Translate() + " = " +
equality.Right.Translate();
如何在右侧获取变量的值而不仅仅是变量名,目前我只获取变量名。恩。查找(x => x.ID =变量);如果变量当前设置为7,我需要一种方法来获取值7而不是名称变量。获取存储在变量中的值的正确方法是什么?
答案 0 :(得分:1)
看看Matt Warren's article LINQ: Building an IQueryable Provider - Part III。它包含Evaluator
类的代码,它将内联所有可内联的值。在您的情况下,它会将variable
替换为包含值7的ConstantExpression
。
本系列的其他文章也可能对你感兴趣。
答案 1 :(得分:0)
分别尝试投放到MemberExpression或ConstantExpression:
var memberExpression = (MemberExpression) expression.Left;
var constantExpression = (ConstantExpression) expression.Right;
哦,错过了它是一个变量。然后右操作数应为 ParameterException 类型。但是,为了获得它的价值,你可以使用
Func<object> getValue = expression.Compile();
var value = getValue();
请注意,这可能会很慢。