我有一个VB.NET函数来获取基于状态参数的投诉列表。它正在使用LINQ方法,并且正常工作:VB.NET - 将LINQ查询更改为DataSet查询
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中很新手,为了完成基本的工作,需要在Internet上搜索很多东西。
更新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
我编辑使用索引为ds.Tables( 0)并遵循你的IEnumerable行。但是,当我使用IEnumerable(的DataRow),我得到错误,DataRow不能转换为ComplainTable,这是该函数的返回类型。 – navilink
@navilink您现在需要从'DataRow'手动创建'ComplainTable'实例。最初,它是由LINQ-to-SQL创建的,现在您切换到LINQ-to-DataSet,您需要手动处理。检查**更新**部分 – har07
好吧,我添加了您的更新代码(由于语法错误删除最后一个括号),我的最新代码是在更新1(在我的原始文章)。仍然没有返回。我确定数据集中包含项目,因为我设法打印出内容。 – navilink