获取MemberExpression,期望ConstantExpression

时间:2014-05-20 11:20:18

标签: c# linq lambda expression-trees

今天很多问题!我无法弄明白这一点,所以我想我会把它扔出去。

我正在编写一个流畅的界面来构建一个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属性的对象)。

这是为什么?我有一些关于如何解决它的想法,但我不想解决它,我希望它能够工作!

1 个答案:

答案 0 :(得分:1)

访问字段或属性将是MemberExpression。 ConstantExpression将是一个常量,如:

.Where(j => j.Driver.Chatiness == 5)