2012-02-24 13 views
-1

これは私のシナリオです。私は特定の接頭辞(例: "95973"または "95949")を持ついくつかの番号を拒否する電話番号登録コンポーネントをやっています。これらのプレフィックスはすでにデータベースに保存されています。SQL照会 "LIKE"に類似したC# "Like"検索

私が知りたいのは、拒否したいプレフィックスと登録番号を一致させるために使用できるC#メソッドがあることです。

擬似コードで更新

BEGIN 
GET phone num FROM querystring 
FOR EACH banned prefix IN DB 
    CHECK if phone num BEGINS WITH banned prefix 
     IF TRUE, RESPOND TO phone num WITH error message 
     ELSE, REGISTER phone num 
END EACH 
END 
+1

正規表現を使用することができます。 Linq。部分文字列のチェックでは、コードに含まれる電話番号や接頭辞の情報を少し詳しく知ることができます。 – rerun

+0

SomeString.Contains( "95973")だけを実行しますか? – Tod

答えて

5

あなたはString.StartWithメソッドを使用することができます。

 string phone = "9182323243"; 
string[] prefix = {"93","94","85"}; 

if (prefix.Any(pre => phone.StartsWith(pre))) 
    //Reject 
else 
    //Accept 
ほとんどの簡単な
2

 var prefix = "95973"; 
     var number = "95973-123456"; 
     var reject = number.Contains(prefix); 
     var reject2 = number.StartsWith(prefix); 
2

あなたは何をしているかを説明し、迅速かつunefficient方法は、以下のLINQラインです:

// load all prefixes 
IEnumerable<string> prefixes = GetPrefixes(); 

// does Any prefix exists such that "number" starts with it? 
bool reject = prefixes.Any(p => number.StartsWith(p)) 

あなたの接頭辞であることがわかっている場合常に5と非常に効率的な正確な検索を行うことができます:

string number = "1234567889"; 

// get the prefix part 
string prefix = number.Substring(0, 5); 

// check if prefixes contains it 
bool reject = prefixes.Contains(prefix); 

どのような場合でも、プレフィックスをあまり頻繁に更新しないと、膨大な量ではありません(長い5文字の場合、膨大な量ではありません:))私はあなたをメモリのDBからロードすることをお勧めします。 HashSet<string>と言って、後者のアプローチを使うと、速くブリーチになるでしょう。

0

私は既にPBX用のOSを書いている経験があります。だから、あなたの状況での最善の方法はの規則のように書くことです: * - 任意の数字の数値は0かもしれません ? - 1任意の数字

例:

ルール: "23948 ??"、番号が "23948" から始まるがすべきと

ルールの後に2桁の数字が含まれている必要があります。 "9 *"、すべての数字、開始数字9から(この場合、PBXは、入力された各数字の後、次の数字の前に、例えば2秒間ユーザ入力を待たなければならない)。

この場合、正規表現を使用する必要があります