微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 为什么编译器认为这是Object而不是DataRow?

我正在使用LINQ查询将DataTable对象中的数据转换为自定义POCO对象的简单IEnumerable.

我的LINQ查询是:

Dim dtMessages As DataTable

    '...dtMessages is instantiated ByRef in a helper data access routine... '

    Dim qry = From dr As DaTarow In dtMessages.Rows
              Select New OutBoxMsg With {
                  .ComputerID = dr(dcComputerID),.MessageData = dr(dcmessageData),.OutBoxID = dr(dcOutBoxID),.OutBoxReceivedID = dr(dcOutBoxReceivedID),.TrxDate = dr(dcTrxDate)
              }

但是,编译器在Dr As DaTarow下发出警告消息,并显示以下消息:

Option Strict On disallows implicit conversions from ‘Object’ to ‘System.Data.DaTarow’.

为什么我会收到此错误,我需要做些什么才能修复它?我原以为dtMessages.Rows返回了一个DaTarow类型的集合.这不正确吗?

解决方法

Lok at DataTable.Rows – 它是一个DaTarowCollection,它只实现IEnumerable,而不是IEnumerable(Of DaTarow).

幸运的是,在DataTableExtensions中有一个扩展方法,它允许你调用AsEnumerable()而不是行; AsEnumerable返回一个IEnumerable(Of DaTarow):

Dim qry = From dr As DaTarow In dtMessages.AsEnumerable()
          ...

(我更喜欢使用dt.Rows.Cast(Of DaTarow),因为它对可能失败的东西的印象较少.它更适合DataTable.两者都可以工作.)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐