2015-04-17 67 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