数据表select() - 搜索数字模式

时间:2011-12-20 11:18:05

标签: vb.net winforms filter datatable


我的数据表中的Select()方法有问题。

如果我想在我的DataTable中搜索多种模式(搜索功能)

对于字符串列,“赞”工作

Select(String.Format("Requester like '%{0}%'", tb_RequesterSearch.Text))

但我还需要检查数字列中的数字模式

如果我尝试类似

的话
For Each drOrder As DataRow In dsDatabase.Tables("ProjektImport").Select(String.Format("PONumber like '%{0}%'", convert.toDouble(tb_POSearch.Text)))
     'Do something
Next

我总是得到例外,'Like'不支持数字列。

是否有一个等效的函数或方法将我的列强制转换为字符串(仅在select中)?

提前致谢

2 个答案:

答案 0 :(得分:2)

LIKE表达式不适用于数字列。您可以通过varchar(在填写之前)向DataTable添加其他select-clause列,或者使用以下LINQ方式:

Dim PONumber As Double
If Double.TryParse(tb_POSearch.Text, PONumber) Then
    Dim PONumber_Pattern As String = "*" & PONumber & "*"
    Dim query As IEnumerable(Of DataRow) =
        From row In dsDatabase.Tables("ProjektImport").AsEnumerable()
        Where DirectCast(row("PONumber"), Double).ToString Like PONumber_Pattern
        Select row
    If query.Any Then
        For Each row As DataRow In query
             ' Do whatever you want with this DataRow '
        Next
    End If
End If

不要将ADO.NET LIKE Expression与VB.NET的LIKE-Operator混淆,我在这里使用它来保持简单和有效。我也可以使用String.ContainsRegularExpression来实现同样的目标,这是性能和灵活性之间的权衡。

答案 1 :(得分:0)

试试这个:

... dsDatabase.Tables("ProjektImport").Select(String.Format("PONumber = {0}", tb_POSearch.Text))