如何在 VB.net 中的 DataSet.Tables.Select() 中使用正则表达式



我有一个包含多个值的数据集。我想从数据表 BLABLA 中获取该数据集中的这些行,该数据集包含一个"S",数字从 0 到 6。然后我想在消息框中显示它们。

我的正则表达式是S[0-6]

Dim answer As String = ""
Dim myregex As Regex = New Regex("S[0-6]")
Dim SearchRows() As DataRow = datasetB.Tables("BLABLA").Select("Data LIKE  '%myregex%'")
For k As Integer = 0 To SearchRows.Length - 1
    If answer = "" Then
        answer = SearchRows(k).Item("Data")
    Else
        answer = answer & vbNewLine & SearchRows(k).Item("Data")
    End If
Next
MsgBox(answer)

不幸的是SearchRows是空的。我无法通过调试找到原因。 我做错了什么?

DataTable.Select 方法不支持正则表达式。 正如文档所述,它确实允许您将filterExpression字符串作为参数传递,但仅仅因为它采用过滤器表达式并不意味着它支持正则表达式。 相反,它主要支持与 T-SQL 中的 WHERE 子句相同的表达式。 T-SQL 的LIKE运算符不支持正则表达式模式,DataTable.Select 也不支持。 请参阅此文档以了解 DataTable.Select 方法的 LIKE 运算符支持的模式表达式的规则。

LIKE运算符支持的过滤器表达式不如正则表达式高级,因此几乎可以肯定不可能构造如此特定的过滤器表达式。 如果有一种方法可以过滤到 0 到 6 之间的数字,我不知道它,文档也没有提到它。 所以,如果你真的需要按正则表达式过滤行,你仍然可以这样做,但你需要选择所有行,然后自己过滤它们:

Dim SearchRows() As DataRow = datasetB.Tables("BLABLA").Select().
    Where(Function(r) myregex.IsMatch(r.Item("Data").ToString())).
    ToArray()

最新更新