【发布时间】:2014-05-20 20:16:09
【问题描述】:
今天有很多问题!我想不通,所以我想我会把它扔在那里。
我正在编写一个流畅的界面来构建一个 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 属性的对象)。
这是为什么?我对如何解决它有一些想法,但我不想解决它,我希望它起作用!
【问题讨论】:
标签: c# linq lambda expression-trees