【问题标题】:Dynamic Linq cannot parse long.Parse()动态 Linq 无法解析 long.Parse()
【发布时间】:2013-05-20 20:58:53
【问题描述】:

我正在使用动态 Linq 库来解析布尔表达式。在这种方法中:

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\")"

这是正确的(InstanceIDEventListItem 中的一个属性),但是,对 ParseLambda() 的调用失败,并出现以下异常:

No property or field 'long' exists in type 'EventListItem'

我尝试解析一个包含string.Compare() 的表达式并且效果很好,所以我不明白为什么long.Parse() 不起作用。我只是想知道是否有人这样做过。任何帮助表示赞赏。

【问题讨论】:

  • long 不是类型的名称,它是 C# 提供的快捷方式。 Int64 是技术名称,你试过吗?同样String是字符串类型的名称。
  • 是的,它奏效了。虽然我不明白,string.Compare() 有效,尽管string(小写“s”)也是一个快捷方式,不是吗?
  • @Guvante 如果您愿意,请继续发表您的评论作为答案,我会接受它,因为您在其他人之前回答。

标签: c# dynamic-linq


【解决方案1】:

long 不是类型的名称,它是 C# 提供的快捷方式。 Int64 是技术名称,你试过吗?同样String是字符串类型的名称。

请注意,string 可能有效,因为虽然 C# 区分大小写,但分析器可能会也可能不会。

【讨论】:

    【解决方案2】:

    .NET 中不存在 long 类型。 long 是 C# 关键字,是 .NET 类型 System.Int64 的别名。尝试使用Int64.Parse(...)

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 2013-06-28
      • 1970-01-01
      • 2010-12-08
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多