2017-06-06 6 views
0

DataTableにデータがあり、LIKEクエリでフィルタしたいので、以下のようなコードを書いていますので、クエリを生成してRowFilterのオブジェクトに渡しています。 DataView。上記のコードセグメントでDataViewでLikeステートメントを使用するRowFlter

if (results.Count() == 2) 
{ 
    if (results[0].ToString() == "" && results[1].ToString() != "") 
    { 
     searchString = String.Format("[" + searchBy + "] LIKE '%{0}'", results[1].ToString()); 
    } 
    else if (results[0].ToString() != "" && results[1].ToString() == "") 
    { 
     searchString = String.Format("[" + searchBy + "] LIKE '{0}%'", results[0].ToString()); 
    } 
    else if (results[0].ToString() != "" && results[1].ToString() != "") 
    { 
     searchString = String.Format("[" + searchBy + "] LIKE '{0}%{1}'", results[0].ToString(), results[1].ToString()); 
    } 
} 

if (searchString != "") 
{ 
    DataView dv = new DataView(AccountList.Tables[0]); 
    dv.RowFilter = searchString; 
    var tab = dv.ToTable(); 
    DataSet data_set = new DataSet(); 
    data_set.Tables.Add(tab); 
    ProcessDataSetAndLoadData(data_set); 
} 

状態ならばその状態で、私は

[AccountCode] 'のC%のl' の

LIKE、このようsearchStringのを取得しています、他の最後を除いて正常に動作しています 私は RowFilter、私は以下のようなERORを得ているにこれを渡し

エラーでLike演算子:文字列パターン 'c%l'は​​無効です。

他のすべての条件から、私は以下のようなsearchStringを取得しています。これらの条件は正常に動作しています。

[AccountCode] LIKE '%c%' 
[AccountCode] LIKE 'c%' 
[AccountCode] LIKE '%c 

私はこれだけ ような文字列のエラーを取得していますなぜ私の質問は?。 [AccountCode] LIKE 'c%l'

私の仕事を完了するために助言してください。

答えて

0

@KiranBeladiyaが私に助言するように、私は以下のようなsearchStringを生成しました。正常に動作しています。今後の視聴者のために正しい出力が得られます。

searchString = String.Format("[" + searchBy + "] LIKE '"+ results[0].ToString() + "%' AND [" + searchBy + "] LIKE '" + "%" + results[1].ToString()+ "'"); 

以下のような本を返す文字列、

[AccountCode] LIKE 'c%' AND [AccountCode] LIKE '%l' 

だから、それは以下の文字列の同じ出力を返している RowFilterオブジェクトにこの文字列を渡した場合。あなたの答え@KiranBeladiyaため

[AccountCode] LIKE 'c%l' 
1

DataViewフィルタでは、文字列の途中でワイルドカード文字を使用できません。 https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

ワイルドカード文字

は両方とも*と%LIKE比較にワイルドカード文字のために交換可能に使用することができると言う:

このMSDNの記事を参照してください。 LIKE句の文字列に*または%が含まれている場合、それらの文字はかっこ([])で囲む必要があります。括弧が句に含まれる場合、各括弧文字は角括弧([[]] [[]]など)で囲む必要があります。ワイルドカードは、パターンの始まりと終わり、またはパターンの終わり、またはパターンの始まりに使用できます。たとえば:

"ItemNameのLIKE '製品'"

"ItemNameのLIKE '*製品'"

"ItemNameのLIKE '製品*"' は

ワイルドカード文字はでは許可されません文字列の真ん中。たとえば、 'te * xt'は許可されません。

+0

感謝は、このような文字列を使用する彼らのいずれかの方法である「テ%XT」 –

+0

あなたはと、フォローように2つの条件を試すことができます:[AccountCode]「のC%」AND LIKE [ AccountCode] LIKE '%l' –

+0

大丈夫@Kiran Beladiyaを試してみよう –

関連する問題