从查询表达式结果向DataTable添加行

时间:2013-05-15 09:35:22

标签: linq

我正在尝试从查询表达式结果中动态地向数据表添加行。但是,我得到以下异常: “无法将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。

1 个答案:

答案 0 :(得分:0)

尝试更改为int?而不是int

  

“无法将DBNull.Value强制转换为'System.Int16'。请使用可空类型。”

这是因为您尝试将可空类型转换为int。

检查数据库表中哪一列允许为null。然后你可以把它变成可以为空的类型。

例如:

misDTRow.Field<Int?>("DepartmentID") equals deptDTRow.Field<Int?>("DeptID")