我有一個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