我正在使用Dynamic Linq Library来解析布尔表达式。在这种方法中:
public static LambdaExpression Parse(SearchQuery query)
{
string compilableExpression = BuildCompilableExpression(query);
ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(EventListItem));
return System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { parameter }, null, compilableExpression);
}
BuildCompilableExpression
返回此字符串:
"long.Parse(InstanceID.ToString()) == long.Parse(\"2\")"
哪个是正确的(InstanceID
是EventListItem
中的属性),但是ParseLambda()
的调用会因此异常而失败:
No property or field 'long' exists in type 'EventListItem'
我已经尝试解析包含string.Compare()
的表达式并且运行正常,所以我不明白为什么long.Parse()
不起作用。我只是想知道是否有人这样做过。任何帮助表示赞赏。
答案 0 :(得分:2)
.NET中不存在类型long
。 long
是C#关键字,是.NET类型System.Int64
的别名。尝试使用Int64.Parse(...)
。
答案 1 :(得分:2)
long
不是类型的名称,它是C#提供的快捷方式。 Int64
是技术名称,你试过吗?类似地,String
是字符串类型的名称。
请注意,string
可能有效,因为虽然C#区分大小写,但分析器可能是也可能不是。