2011-06-29 13 views
0

Silverlightでデータグリッド用の汎用フィルタを作成するために、オープンソースプログラムを変更しています。クラスのコードを以下に示します。 バイナリ演算子等しいがタイプ「System.Int64」と「可能System.Int32」のために定義されていません:私は整数でフィルタリングしてみてくださいバイナリ式クラスが比較演算子で無効な演算例外をスローする

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がを取得します。

このコードのサンプルプログラムでは、ユーザーの入力整数がInt32型であるため、このコードのサンプルプログラムでは例外が発生しませんが、アプリケーションではInt64です。誰でもこの問題を解決する方法はありますか?

答えて

2

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

+0

どのように私はそれを逃したのか分かりません。ありがとう! – Andrew

関連する問題