今天很多问题!我无法弄明白这一点,所以我想我会把它扔出去。
我正在编写一个流畅的界面来构建一个SQL字符串(是的,我知道LINQ to Entities ......这是一个很长的故事)。
我正在检查if / else子句中的表达式类型,如下所示:
if (expression is MemberExpression)
{
var memberExpression = expression as MemberExpression;
StringBuilder sb = new StringBuilder();
...
return sb.ToString();
}
if (expression is MethodCallExpression)
{
var methodCallExpression = expression as MethodCallExpression;
return GetParameterString(Expression.Lambda(expression).Compile().DynamicInvoke().ToString());
}
if (expression is ConstantExpression)
{
var constantExpression = expression as ConstantExpression;
return GetParameterString(constantExpression.Value.ToString());
}
当我通过以下代码运行以下内容时:
.Where(j => j.Driver.Chatiness == searchResource.Chatiness)
...“searchResource.Chatiness”正在激活MemberExpression代码,当应该激活ConstantExpression时(因为searchResource是一个包含Chatiness属性的对象)。
这是为什么?我有一些关于如何解决它的想法,但我不想解决它,我希望它能够工作!
答案 0 :(得分:1)
访问字段或属性将是MemberExpression。 ConstantExpression将是一个常量,如:
.Where(j => j.Driver.Chatiness == 5)