gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:07:18 24 4
gpt4 key购买 nike

我正在使用 LINQ 查询来翻译 DataTable 中的数据对象是简单的IEnumerable自定义 POCO 对象。

我的 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 的集合.这不正确吗?

最佳答案

乐于DataTable.Rows - 这是一个 DataRowCollection仅实现 IEnumerable ,而不是 IEnumerable(Of DataRow) .

幸运的是, DataTableExtensions 中有一个扩展方法让您调用 AsEnumerable() 而不是 Rows ; AsEnumerable返回 IEnumerable(Of DataRow) :

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

(与使用 dt.Rows.Cast(Of DataRow) 相比,我更喜欢这个,因为它不会给人一种可能失败的印象。它更适合 DataTable 。不过两者都可以。)

关于.net - 为什么编译器认为这是一个 Object 而不是 DataRow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com