0

オープンソースプログラムを変更して、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が発生します。二項演算子Equalは、タイプ「System.Int64」および「System.Int32」に対して定義されていません。

この例外がスローされる理由は理解していますが、このコードのサンプルプログラムでは、ユーザーが入力した整数がInt32型であるため、例外は発生しませんが、私のアプリケーションではInt64です。誰かがこれを修正する方法について何かアイデアがありますか?

4

1 に答える 1

2

long入力をではなくとして解析する必要がありますint

于 2011-06-29T18:31:32.940 に答える