0

電話番号に基づいてデータテーブルから選択する必要があります。問題は、電話番号にスペースが含まれている可能性があることですが、これらは必ずしも一貫しているとは限りません。

たとえば、データ テーブル内の電話番号は、次のいずれかになります。

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

これは実際にはすべて同じ数です。

検索文字列を標準化し、そこからスペースを削除することはできますが、「01234123123」を実際に「0123 412 3123」またはその他のバリアントを含む列と一致させるにはどうすればよいですか?

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

数値が正確に一致する場合にのみ行を返します。

考えられるすべての場所にスペースを含む searchString の多くのバリエーションをループして生成し、それらすべてを検索することを考えましたが、それは非常にリソースを集中的に使用するようです...

より良い方法はありますか?

4

2 に答える 2

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
于 2013-01-26T14:40:05.210 に答える
0

明らかに、Tim が示したように、必要な情報を取得する方法がありますが、回避策が必要ないようにデータを修正することを検討する必要があります。すべてのスペースを削除するか、同じ場所にスペースがあることを確認して、すべてが同じパターンに収まるようにデータを修正する必要があります。データベース上のデータを修正するのは簡単です。更新ステートメントを使用してすべてのスペースを置き換えてから、必要に応じて文字列操作を使用してすべての数値を一致させることができます。難しいのは、可能であればコードに戻り、電話番号を挿入または更新するコードが悪い状態にならないようにする必要があることです。私はバンドエイドの解決策を使用したことに対して、ここにいる誰と同じように罪を犯していますが、多くの場合、あなたは自分自身の将来の頭痛の種を生み出しています.

HTH

ウェイド

于 2013-01-26T14:50:15.817 に答える