VB.NET-将LINQ查询更改为数据集查询

VB.NET-将LINQ查询更改为数据集查询,.net,vb.net,linq,dataset,.net,Vb.net,Linq,Dataset,我有一个VB.NET函数,可以根据状态参数获取投诉列表。它正在使用LINQ方法,工作正常: Public Function getComplain(ByVal stat As Integer) As List(Of ComplainTable) Dim listt = (From tbl In context.ComplainTable _ Where tbl.STATUS = stat _ Select tbl).To

我有一个VB.NET函数,可以根据状态参数获取投诉列表。它正在使用LINQ方法,工作正常:

Public Function getComplain(ByVal stat As Integer) As List(Of ComplainTable)
    Dim listt = (From tbl In context.ComplainTable _
                 Where tbl.STATUS = stat _
                 Select tbl).ToList
    Return listt
End Function
问题是我想将LINQ查询改为DataSet查询。我尝试的代码如下,但我得到的结果/输出为空:

Public Function getComplain(ByVal stat As Integer) As List(Of ComplainTable)
    Dim ut As New Util

    Dim query = "SELECT * FROM ComplainTable"
    Dim ds As DataSet = ut.getData(query)
    Dim dt As DataTable = ds.Tables("SystemComplain") '???
    Dim dr As IEnumerable(Of SystemComplain) = dt.AsEnumerable.Select("STATUS = " & stat) '???

    Return dr.ToList
End Function
标记的行是???是我不确定我做得是否正确的部分。我对.NET非常陌生,需要在互联网上搜索很多东西才能完成基本的工作

更新1

Public Function getComplain(ByVal stat As Integer) As List(Of ComplainTable)
    Dim ut As New Util

    Dim query = "SELECT * FROM ComplainTable"
    Dim ds As DataSet = ut.getData(query)
    Dim dt As DataTable = ds.Tables(0)
    Dim dr As IEnumerable(Of ComplainTable) = _
                     dt.AsEnumerable. _
                        Where(Function(x) x.Field(Of String)("STATUS") = stat). _
                        Select(Function(x) New ComplainTable With { _
                            .STATUS = x.Field(Of String)("STATUS") _
                        } _
                        )

    Return dr.ToList
End Function

最初不能通过名称引用DataTable,因为您没有提供名称。但是,您可以使用索引

Dim dt As DataTable = ds.Tables(0)

至于筛选,请不要使用.Select,而是在问题的第二行尝试使用.Where。

带有问号的第一行代码对我来说很好,但如果这对您不起作用,请尝试使用另一个答案中建议的索引。无论如何,对于下一行,请使用带有正确谓词表达式的方法:

Dim dr As IEnumerable(Of DataRow) = dt.AsEnumerable.
                                       Where(Function(x) x.Field(Of string)("STATUS") = stat)
供参考:

更新:

Dim dr As IEnumerable(Of ComplainTable) = _
                 dt.AsEnumerable.
                    Where(Function(x) x.Field(Of string)("STATUS") = stat).
                    Select(Function(x) New ComplainTable With {
                                                .STATUS = x.Field(Of string)("STATUS")
                                                'TODO: manually populate other properties here'
                                            }
                          )
                    }

我编辑使用ds.Tables(0)的索引,并遵循IEnumerable行。但是当我使用IEnumerable(属于DataRow)时,我得到一个错误,即DataRow不能转换为ComplainTable,这是函数的返回类型。@navilink您现在需要从
DataRow
手动创建
ComplainTable
实例。最初,它是由LINQtoSQL创建的,现在由于您切换到LINQtoDataSet,所以需要手动处理相同的操作。检查更新部分OK我添加了您的更新代码(由于语法错误删除了最后一个括号),我的最新代码在更新1中(在我的原始帖子中)。仍然没有归还任何东西。我确信数据集有项目,因为我设法打印出了内容。