使用DataTable.Select()时忽略所有空格

时间:2013-01-26 14:20:08

标签: vb.net visual-studio-2010 select datatable whitespace

我需要根据电话号码从数据表中进行选择。问题是电话号码中可能有空格,但这些不一定一致。

例如,数据表中的电话号码可以是以下任何一个 -

01234 123 123
01234 123123
01234123123
0123 412 3123
0123 4123 123

实际上这是相同的数字。

我可以标准化搜索字符串并从中删除空格,但是如何搜索“01234123123”匹配实际包含“0123 412 3123”或任何其他变体的列?

DataTable.Select("phoneNumber LIKE '" + searchString + "%'")

如果数字完全匹配,则只会返回该行。

我已经想过循环并在所有可能的地方生成带有空格的searchString的许多变体,然后搜索所有这些变量,但这看起来非常耗费资源......

有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用Linq并删除所有空格,例如:

Dim phoneNumber = "01234 123   123"
Dim trimmedNumber = phoneNumber.Replace(" ", "")
Dim filtered = From row In DataTable
               Let trimmed = row.Field(Of String)("phoneNumber").Replace(" ", "")
               Where trimmed = trimmedNumber

答案 1 :(得分:0)

使用下面的链接,解释如何从数据表中删除空格。

Trim whitespace from DataTable cells with Linq

答案 2 :(得分:0)

显然,有一种方法可以获得您想要的信息,如Tim所示,但您应该考虑修复数据,这样您就不需要解决方法了。您应该通过删除所有空格或确保它们在同一位置具有空格来修复数据,使其全部适合相同的模式。修复db上的数据很简单,只需使用update语句替换所有空格,然后如果需要,可以使用字符串操作使所有数字匹配。困难的部分是,如果可以,您将需要返回任何代码,并确保插入或更新电话号码的代码不允许它进入不良状态。我和使用创可贴解决方案的人一样有罪,但更多时候,你为自己创造了一个未来的头痛。

HTH

瓦德