2017-06-06 67 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 –