2016-06-28 12 views
-3

DGVから行を選択するこのコードがあります。% "。検索"%C#

if (row.Cells[1].Value.ToString().Equals(searchValue)) 
{ 
    row.Selected = true; 
    break; 
} 

それは一見正確なものだけでなく、入り口見つけますので、C#で使用するようにSQLから

%".$searchvalue."%

のようなものはありますか?

+1

[LinqでSQL Like Likeを実行する方法]の可能な複製?(http://stackoverflow.com/questions/835790/how-to-do-sql-like-in-linq) –

答えて

0

利用string.Containsの代わりに、あなたは以下のようなStartsWithを使用することができ、文字列の唯一entrancesを知りたい場合は

if (row.Cells[1].Value.ToString().Contains(searchValue)) 
{ 
    row.Selected = true; 
    break; 
} 
+0

ありがとうGilad !! – Vvisions

1

に等しくなります。あなたは、文字列の唯一endingsを知りたい場合は

if (row.Cells[1].Value.ToString().StartsWith(searchValue)) 
{ 
    row.Selected = true; 
    break; 
} 

あなたは以下のようなEndsWithを使用することができます。

if (row.Cells[1].Value.ToString().EndsWith(searchValue)) 
{ 
    row.Selected = true; 
    break; 
} 

パフォーマンスについての心配はありません場合は、上記の例でcontainsを使用することができます。 一般的なケース

+0

StartsWithは最初の単語の最初のカッパーを探すか、それとも単語の最初の文字を探しますか? containsを使用するとパフォーマンスにどのような影響がありますか? – Vvisions

+0

最初の単語の最初の文字だけを探します。 'Contains'は別のアルゴリズムを使い、' StartsWith'や 'EndsWith'よりも多くの組み合わせを計算する必要があります。したがって、必要な文字列のマッチャーがどこにあるのかわからない場合に使用されます。あなたが検索する必要があるものについて非常に確信している場合は、それが始まりまたは終わりに来ると、これらを使用することができます。それ以外の場合、 'Contains'は悪い選択ではありません。 – Venky

+0

すべての単語の最初の文字を確認したい場合は、文字列を 'space'で分割し、それぞれの部分をループして、' matching string'で始まるかどうかを確認する必要があります。 – Venky

0

あなたは模倣 SQL LIKE構築したい場合は、正規表現試すことができます:あなたのケースでは

public static bool Like(String value, String like) { 
    if (String.IsNullOrEmpty(like) || String.IsNullOrEmpty(value)) 
    return false; // or throw exception 

    String pattern = "^" + Regex.Escape(like).Replace("%", ".*").Replace("_", ".") + "$"; 

    return Regex.IsMatch(value, pattern); 
} 

....

String source = "abcdef"; 
// true 
bool result = Like(source, "%b_d%"); 

if (Like(row.Cells[1].Value.ToString(), searchValue)) { ... }