0

大家好,我正在使用 Linq 并尝试将结果复制到表对象。但是,我收到了演员表异常。

这是代码:

Dim teams As DataTable = citySideDataset.Tables("Teams")
        Dim query = From team In teams.AsEnumerable() Where team.Field(Of String)("Venue ID") = venueID And team.Field(Of Integer)("Division ID") = divisionID Select team
        Dim boundTable As DataTable = query.CopyToDataTable()

有什么建议么?

编辑:

对不起。这是一个 InvalidCastException。

在尝试复制到数据表之前一切正常

4

1 回答 1

0

通过评论中的一些探索,我们了解到您Division ID在数据库中的数据类型是long. 您的查询of Integer在尝试从字段中提取值时使用,这将引发错误。我们还了解到您的列支持空值。要修复您的查询,您应该使用of Nullable(of Long),这将使其如下

Dim query = From team In teams.AsEnumerable() _
            Where team.Field(Of String)("Venue ID") = venueID _
            And team.Field(Of Nullable(of Long))("Division ID") = divisionID _
            Select team

您应该注意的最后一个考虑因素是,如果没有行通过您使用的任何过滤器,CopyToDataTable() 它将引发自己的异常。因此,如果您的结果有可能为空,您将需要在调用该方法之前检查行。

Dim boundTable As DataTable
If query.Any() Then
    boundTable = query.CopyToDataTable()
Else
    'just use empty clone of original table, if applicable
    boundTable = table.Clone() 
End If
于 2013-04-10T02:40:02.973 回答