【问题标题】:Find a value in DataTable在 DataTable 中查找值
【发布时间】:2010-10-12 15:21:25
【问题描述】:

有没有办法在 C# 中的 DataTable 中找到一个值而不进行逐行操作?

该值可以是数据表中单元格(row[columnName].value 的子字符串,以逗号分隔)的一部分,并且该值可以出现在该行的任何一列中。

【问题讨论】:

    标签: c# datatable


    【解决方案1】:

    DataTable 或 DataSet 对象将有一个 Select 方法,该方法将根据作为参数传入的查询返回一个 DataRow 数组。

    根据您的要求,您的过滤器表达式必须具有一定的通用性才能使其正常工作。

    myDataTable.Select("columnName1 like '%" + value + "%'");
    

    【讨论】:

    • 我们如何用 linq 实现上述语法。
    • 你怎样才能使用这个数组作为组合框的数据源?
    【解决方案2】:

    也许您可以像这样按可能的列过滤行:

    DataRow[] filteredRows = 
      datatable.Select(string.Format("{0} LIKE '%{1}%'", columnName, value));
    

    【讨论】:

    • 如果你想要精确值:DataRow[] filteredRow = datatable.Select("ColumnName='value'");
    【解决方案3】:

    AFAIK,没有内置用于搜索所有列的内容。您只能对主键使用FindSelect 需要指定的列。您也许可以使用 LINQ,但最终这只是执行相同的循环。也许只是自己展开?至少它是可读的。

    【讨论】:

      【解决方案4】:

      这个问题在 2009 年提出,但我想分享我的代码:

          Public Function RowSearch(ByVal dttable As DataTable, ByVal searchcolumns As String()) As DataTable
      
          Dim x As Integer
          Dim y As Integer
      
          Dim bln As Boolean
      
          Dim dttable2 As New DataTable
          For x = 0 To dttable.Columns.Count - 1
              dttable2.Columns.Add(dttable.Columns(x).ColumnName)
          Next
      
          For x = 0 To dttable.Rows.Count - 1
              For y = 0 To searchcolumns.Length - 1
                  If String.IsNullOrEmpty(searchcolumns(y)) = False Then
                      If searchcolumns(y) = CStr(dttable.Rows(x)(y + 1) & "") & "" Then
                          bln = True
                      Else
                          bln = False
                          Exit For
                      End If
                  End If
              Next
              If bln = True Then
                  dttable2.Rows.Add(dttable.Rows(x).ItemArray)
              End If
          Next
      
          Return dttable2
      
      
      End Function
      

      【讨论】:

      • 这是一个 C# 问题,不是 VB。
      • 并在行和列上循环,这是 OP 想要避免的
      猜你喜欢
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多