在DataView RowFIlter

时间:2017-06-06 05:47:40

标签: c# datatable dataview rowfilter

我有一个包含一些数据的DataTable,我想用LIKE查询进行过滤,所以我编写了如下代码,一切正常,我生成查询并将其传递给{{1 } RowFilter的对象。

DataView

在上面的代码段工作正常,除了条件之外的其他,在那种情况下我得到了像这样的searchString,

  

[AccountCode] LIKE' c%l'

当我将此传递给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); } 时,我感觉如下,

  

Like运算符出错:字符串模式' c%l'无效。

在所有其他条件下,我获得了如下所示的searchString,这些条件正常。

RowFilter

我的问题是为什么我只为这样的字符串收到错误 ?。     [AccountCode] LIKE' c%l'

请告诉我完成我的任务。

2 个答案:

答案 0 :(得分:1)

在DataView过滤器中,字符串中间不允许使用通配符。

请参阅此MSDN文章:https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx,其中包含

通配符

在LIKE比较中,*和%可以互换地用于通配符。如果LIKE子句中的字符串包含*或%,则这些字符应括在括号([])中。如果括号在子句中,则每个括号字符应括在括号中(例如[[]或[]])。允许在模式的开始和结束处,或在模式的结尾处或在模式的开始处使用通配符。例如:

“ItemName LIKE' product '”

“ItemName LIKE'* product'”

“ItemName LIKE'产品*'”

字符串中间不允许使用通配符。例如,不允许使用'te * xt'。

答案 1 :(得分: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'