【发布时间】:2012-10-05 14:46:09
【问题描述】:
我试图将 LINQ 查询的输出转换为数据表,我有以下代码,但它在 (Of DataRow) 部分显示语法错误:
我使用这个问题作为指导: Filling a DataSet or DataTable from a LINQ query result set
如果我使用
query.CopyToDataTable() '而不是重载 query.CopyToDataTable(数据行)它会抛出一个 invalidCastException。
我正在寻找一种简单的方法来完成这项任务,这似乎是最简单的方法,没有太多代码并且必须实现任何“粉碎机”方法等,但如果这是唯一的方法,那么请为我指明正确的方向。
这是抛出的错误(我将其本地化为英语,西班牙语有点不同):
无法将 WhereSelectEnumerableIterator 类型的对象转换为 IEnumerable System.Data.DataRow 类型的对象
我尝试了以下方法:
声明一个可以像这样创建数据表的扩展方法:
_ 公共函数 myToDataTable(Of T)(source As IEnumerable(Of T)) As DataTable 暗淡属性 As PropertyInfo() = GetType(T).GetProperties() 将输出调暗为新 DataTable() 对于每个 prop In 属性 output.Columns.Add(prop.Name, prop.PropertyType) 下一个 对于源中的每个项目 暗淡行 As DataRow = output.NewRow() 对于每个 prop In 属性 row(prop.Name) = prop.GetValue(item, Nothing) 下一个 output.Rows.Add(行) 下一个 返回输出 结束功能但是在将列添加到数据表时总是会抛出异常:
DataSet does not support System.Nullable
我还将 linq 查询更改为:
暗查询 = 来自 X.CAJERO 中的 cajero 选择卡杰罗 Dim bla = query.myToDataTable按照乔恩的建议,我发现了这个问题:
.NET - Convert Generic Collection to DataTable
这只是给了我需要的最后一点代码:
output.Columns.Add(prop.Name, If(Nullable.GetUnderlyingType(prop.PropertyType), prop.PropertyType))和
row(prop.Name) = If(prop.GetValue(item, Nothing), DBNull.Value)【问题讨论】:
-
错误说明了什么?
-
@SLaks 我编辑了问题,以便您看到错误
-
X.CAJERO是什么类型的?
-
@Jon 它是从数据库导入的 EdmEntityType,只是一个包含几个字段的表。