【问题标题】:how to run query on dataset?如何对数据集运行查询?
【发布时间】:2016-09-02 12:34:57
【问题描述】:

我有一个名为 dsViewDataSet 包含数据。这是我用来读取 XML 的代码:

dsView = new DataSet();
dsView.ReadXml(@"\c:MyXml.xml");

数据有一个名为MEN 的表,其中包含FnameLname 字段。如何对此dsView 运行查询? (例如:select * from MEN where Fname = 'zz'

【问题讨论】:

标签: c# winforms


【解决方案1】:

您无法在 DataSet 上运行完整的 SQL 语句 - 但您的 DataSet 中的 DataTable 确实有一个名为 Select(string) 的方法,该方法选择符合特定条件的 DataRow 对象数组。

查看MSDN docs on DataTable

您可能必须执行类似(未经测试)的操作:

DataTable tblMEN = dsView.Tables["MEN"];
DataRow[] results = tblMen.Select("Fname = 'zz'");

【讨论】:

  • @Gali: 对DataRow 的数组进行 foreach - 这只是标准的 ADO.NET ....
【解决方案2】:

我认为您不能在DataSet 上运行 SQL 查询,因为它没有查询引擎。不过你可以试试LINQ to DataSet

另外,如果你只对数据感兴趣(而不是DataSet的数据绑定属性),我建议你使用LINQ to XML来查询文档。

【讨论】:

    【解决方案3】:
    dsView.Table[0].DefaultView.RowFilter = "Fname = 'zz'";
    // now default view contains the filtered rows
    //ds.Table[0].DefaultView
    

    更多关于 msdn 上的DefaultVeiw

    【讨论】:

      【解决方案4】:

      AFAIK 您只能使用 Select method.

      DataTable 上运行 Sql Like 查询

      你可以在这里使用this overload of DataTable.Select 来做这样的事情:

      DataRow[] foundRows = dsView.Table[0].Select("Fname = `zz`");
      

      dsView.Table[0] 应该指向 MEN 的表并且应该有一个列 Fname

      有效的表达式与DataColumn表达式相同:
      http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

      【讨论】:

        【解决方案5】:

        这是我用来制作菜单的示例。

        Dim dstpage As DataSet
        dstpage = businessService.GetData()
        Dim userTable As DataTable
        userTable = dstpage.Tables(0)
        If userTable.Rows.Count > 0 Then
           Dim results As DataRow()
           results = userTable.Select("PAGE_GROUP_NAME='People'")
           For i As Integer = 0 To results.Count - 1
               FilePath = userTable.Rows(i)("FILE_PATH").ToString()
               PageName = userTable.Rows(i)("PAGE_NAME").ToString()
           Next
        End If
        

        【讨论】:

          【解决方案6】:
          // Create a table of five different people.
              // ... Store their size and sex.
              DataTable table = new DataTable("Players");
              table.Columns.Add(new DataColumn("Size", typeof(int)));
              table.Columns.Add(new DataColumn("Sex", typeof(char)));
          
              table.Rows.Add(100, 'f');
              table.Rows.Add(235, 'f');
              table.Rows.Add(250, 'm');
              table.Rows.Add(310, 'm');
              table.Rows.Add(150, 'm');
          
              // Search for people above a certain size.
              // ... Require certain sex.
              DataRow[] result = table.Select("Size >= 230 AND Sex = 'm'");
              foreach (DataRow row in result)
              {
                  Console.WriteLine("{0}, {1}", row[0], row[1]);
              }
          

          您可以使用此代码。希望对您有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-22
            • 1970-01-01
            • 1970-01-01
            • 2023-03-22
            相关资源
            最近更新 更多