2017-06-06 68 views
0

我有一個DataTable的一些數據,我想過濾LIKE查詢,所以我寫了一個像下面的代碼和一切工作正常,我生成查詢並將它傳遞給RowFilter對象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] LIKE 'C%L'

當我路過這RowFilter我越來越像下面的eror,

錯誤像運算符:字符串模式'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對象它返回下面的字符串相同的輸出。

[AccountCode] LIKE 'c%l' 
1

在DataView過濾器中,字符串中間不允許有通配符。

請參閱此MSDN文章:https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx它說

通配符

無論是*和%可以互換在LIKE比較通配符使用。如果LIKE子句中的字符串包含*或%,則應將這些字符括在括號([])中。如果括號中有括號,則每個括號字符應該括在括號內(例如[[]或[]])。通配符在模式的開始和結束處,模式的結尾或模式的開始處都是允許的。例如:

「ITEMNAME LIKE '產品'」

「ITEMNAME LIKE '*產品'」

「ITEMNAME LIKE '產品*'」

通配符不允許一個字符串的中間。例如,'te * xt'是不允許的。

+0

感謝你的答案@KiranBeladiya,是他們的任何方式使用這樣的字符串 'TE%XT' –

+0

你可以試試有兩個條件與AND如下:[AccountCode] LIKE 'C%' AND [ AccountCode] LIKE'%l' –

+0

好吧會試試@Kiran Beladiya –