CopyToDataTable(Of DataRow) 显示语法错误
Posted
技术标签:
【中文标题】CopyToDataTable(Of DataRow) 显示语法错误【英文标题】:CopyToDataTable(Of DataRow) shows syntax error 【发布时间】: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,只是一个包含几个字段的表。 【参考方案1】:我认为问题在于您正在尝试转换任意实体类型的 IEnumerable<T>
- 而 CopyToDataTable()
始终要求输入是 some 类型的 @987654324 序列@。
除非您的实体类型实际上派生自 DataRow
,否则这是行不通的。您可能会编写一个 LINQ 查询,该查询创建每个实例的 DataRow
,但我相信您必须自己编写该代码。
我相信你提到的问题,OP 已经有一个强类型的 DataSet
- 至少答案表明是这样的。
【讨论】:
是的,这就是我可以从他对 order.Field以上是关于CopyToDataTable(Of DataRow) 显示语法错误的主要内容,如果未能解决你的问题,请参考以下文章