2015-04-17 189 views
0

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

回答

0

您不能引用數據表最初是由一個名字,因爲你沒有提供的。然而你可以使用索引。

Dim dt As DataTable = ds.Tables(0) 

至於篩選,而不是使用.Select,請嘗試。在問題的第二行。

0

帶問號的第一行代碼對我來說看起來很不錯,但如果這樣做對您不起作用,請嘗試按照其他答案中的建議使用索引。無論如何,下一行中,使用Enumerable.Where()方法與適當的謂詞表達式:

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

參考:Queries in LINQ to DataSet

UPDATE:

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' 
              } 
         ) 
        } 
+0

我編輯使用索引爲ds.Tables( 0)並遵循你的IEnumerable行。但是,當我使用IEnumerable(的DataRow),我得到錯誤,DataRow不能轉換爲ComplainTable,這是該函數的返回類型。 – navilink

+0

@navilink您現在需要從'DataRow'手動創建'ComplainTable'實例。最初,它是由LINQ-to-SQL創建的,現在您切換到LINQ-to-DataSet,您需要手動處理。檢查**更新**部分 – har07

+0

好吧,我添加了您的更新代碼(由於語法錯誤刪除最後一個括號),我的最新代碼是在更新1(在我的原始文章)。仍然沒有返回。我確定數據集中包含項目,因爲我設法打印出內容。 – navilink