二进制表达式类在比较运算符上引发无效操作异常

本文关键字:无效 操作 异常 运算符 表达式 比较 二进制 | 更新日期: 2023-09-27 18:00:55

我正在修改一个开源程序,为Silverlight中的数据网格创建一个通用筛选器。该类的代码如下所示。

    public PropertyData Property { get; set; }
    public FilterOperatorType FilterOperator { get; set; }
    public string FilterValue { get; set; }
    public Expression GetExpression<T>(ParameterExpression pe)
    {
        if (Property == null || Property.PropertyName == null)
            return null;
        PropertyInfo prop = typeof(T).GetProperty(Property.PropertyName);
        Expression left = Expression.Property(pe, prop);
        Expression right = null;
        switch (prop.PropertyType.Name)
        {
            case "String":
                right = Expression.Constant(FilterValue);
                break;
            case "Int32":
                int val;
                int.TryParse(FilterValue, out val);
                right = Expression.Constant(val);
                break;
            case "Int64":  
                int.TryParse(FilterValue, out val);
                Convert.ToInt32(val);        //does not work
                right = Expression.Constant(val);
                break;
            case "DateTime":
                DateTime dt;
                DateTime.TryParse(FilterValue, out dt);
                right = Expression.Constant(dt);
                break;
        }
        switch (FilterOperator)
        {
            case FilterOperatorType.Equal:
                return Expression.Equal(left, right);
            case FilterOperatorType.GreaterThan:
                return Expression.GreaterThan(left, right);
            case FilterOperatorType.GreaterThanOrEqual:
                return Expression.GreaterThanOrEqual(left, right);
            case FilterOperatorType.LessThan:
                return Expression.LessThan(left, right);
            case FilterOperatorType.LessThanOrEqual:
                return Expression.LessThanOrEqual(left, right);
            case FilterOperatorType.NotEqual:
                return Expression.NotEqual(left, right);
        }
        return null;
    }
}

每当我尝试使用整数进行筛选时,我都会得到一个InvalidOperationException,该状态为:没有为类型"System.Int64"answers"System.Int32"定义二进制运算符Equal。

我理解为什么会抛出这个异常,但是在这个代码的示例程序中,我没有得到任何异常,因为用户输入的整数类型是Int32,而在我的应用程序中它是Int64。有人知道怎么解决这个问题吗?

二进制表达式类在比较运算符上引发无效操作异常

您需要将输入解析为long而不是int