【发布时间】:2017-06-15 10:12:52
【问题描述】:
我有两个数据表,想根据各自的 ID 将它们组合成一个数据表。
如果 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);
}
【问题讨论】:
-
请发布异常的完整描述。
-
说明:在执行当前网络请求的过程中发生了一个未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。异常详细信息:System.InvalidCastException:指定的强制转换无效。
-
dict[columnName] = (Int64)dict[columnName] + (Int64)row[columnName] 出错;
-
代码缩进一团糟,按照StyleCop整理代码
标签: c# .net linq-to-sql