我正在尝试从查询表达式结果中动态地向数据表添加行。但是,我得到以下异常: “无法将DBNull.Value强制转换为'System.Int16'。请使用可空类型。”
这是我的代码:
foreach (var linqItem in linqResult)
resultDT.Rows.Add(linqItem.GetType().GetProperties().Select(p => p.GetValue(linqItem, null)).ToArray());
请帮我弄清楚这个问题。
附加代码:
var linqResult = from misDTRow in misUserDetailsDT.AsEnumerable()
join deptDTRow in departmentInfoDT.AsEnumerable()
on misDTRow.Field<Int16>("DepartmentID") equals deptDTRow.Field<Int32>("DeptID")
select
new
{
Username = misDTRow["LoginName"],
EmployeeID = misDTRow["EmployeeID"],
EmployeeName = misDTRow["EmployeeName"],
FoundIn = misDTRow["FoundIn"],
StatusInMIS = (bool)misDTRow["IsActive"] == true ? "Inactive" : "Active",
Department = deptDTRow["DeptName"]
};
DataTable Creation:
DataTable resultDT = new DataTable();
PropertyInfo[] propInfo = linqResult.First().GetType().GetProperties();
foreach (PropertyInfo property in propInfo)
resultDT.Columns.Add(property.Name, property.PropertyType);
我正在从查询结果中动态创建DataTable。
答案 0 :(得分:0)
尝试更改为int?而不是int
“无法将DBNull.Value强制转换为'System.Int16'。请使用可空类型。”
这是因为您尝试将可空类型转换为int。
检查数据库表中哪一列允许为null。然后你可以把它变成可以为空的类型。
例如:
misDTRow.Field<Int?>("DepartmentID") equals deptDTRow.Field<Int?>("DeptID")