2017-06-15 7 views
0

私は2つのデータテーブルを持ち、それらを結合して個々のIDに基づいて1つのデータテーブルを作成します。System.InvalidCastExceptionを修正する方法:指定されたキャストが無効です

2つの初期データテーブルにIDが重複している場合は、columnNameを集計する必要があります。

私は私のコードを実行すると、私はSystem.InvalidCastExceptionのを修正するためにどのようにこのエラー

を取得:指定されたキャストは

DataTable SubData = dsResult.Tables[0]; 

var query = SubData.AsEnumerable().GroupBy(row => new 
{ 
    ProductID = row.Field<Int64>("ProductID"), 
    PrdCode = row.Field<string>("PrdCode") 
}).Select(grp => 
{ 
    dynamic result = new ExpandoObject(); 
    var dict = result as IDictionary<string, object>; 
    result.ProductID = grp.Key.ProductID; 
    result.PrdCode = grp.Key.PrdCode; 

    foreach (DataRow row in grp) 
    { 
     foreach (DataColumn column in SubData.Columns) 
     { 
      string columnName = column.ColumnName; 

      if (columnName.Equals("ProductID") || columnName.Equals("PrdCode")) 
      { 
       continue; 
      } 

      if (!dict.Keys.Contains(columnName)) 
      { 
       dict[columnName] = row[columnName]; 
      } 
      else 
      { 
      if (row[columnName] is System.DBNull) 
      { 
       continue; 
      } 

      if (dict[columnName] is System.DBNull) 
      { 
       dict[columnName] = row[columnName]; 
       continue; 
      } 

      dict[columnName] = (Int64)dict[columnName] + (Int64)row[columnName]; 
      } 
     } 
    } 

    return result; 
}); 

foreach (var item in query) 
{ 
    dtGraph.Rows.Add(item); 
} 
+0

例外の完全な説明を投稿してください。 – ThePerplexedOne

+0

説明:現在のWeb要求の実行中に、未処理の例外が発生しました。エラーの詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。 例外の詳細:System.InvalidCastException:指定されたキャストが無効です。 –

+0

dict [columnName] =(Int64)dict [columnName] +(Int64)row [columnName];のエラーを取得しています。 –

答えて

0

は、「辞書」内のデータを確認し、有効ではありません。 'int'に変換できない値が必要です

関連する問題