Фильтр .Net BindingSource - PullRequest
       12

Фильтр .Net BindingSource

1 голос
/ 18 января 2011

Если я отфильтрую столбец BindingSource следующим образом: "column1 LIKE '%John%'", то все строки, содержащие Джона в этом столбце, вернутся.

Как вернуть все строки, для которых column1 содержит [some text]John[some text]Doe?

"column1 LIKE '%John%Doe'" не работает.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Согласно документации на http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

Подстановочные знаки * и% может использоваться взаимозаменяемо для подстановочные знаки в LIKE сравнение. Если строка в LIKE предложение содержит * или%, те символы должны быть заключены в скобки ([]). Если скобка находится в предложение, каждый символ скобки должен заключить в скобки (например, [[] или же []]). Подстановочный знак допускается при начало и конец шаблона, или в конец шаблона или в начале шаблона. Например:

"ItemName LIKE ' product '"

"ItemName LIKE '* product'"

"ItemName LIKE 'product *'"

Символы подстановки не допускаются в середина строки. Например, 'te * xt' не допускается.

Следовательно, вы не можете использовать LIKE, чтобы делать то, что вы хотите. Ваша следующая лучшая ставка - получить строковое представление и использовать регулярное выражение для его анализа в поисках нужного вам текста. Это будет МЕДЛЕННО.

Вы МОЖЕТЕ сделать

column1 LIKE '%John%' AND LIKE %Doe%'

но логика другая и может не соответствовать вашим ожиданиям.

Редактировать - добавлено

Возможно, лучше выполнить фильтрацию на уровне сервера, поскольку ваша БД может поддерживать подстановочный знак в середине строки. Я только что попробовал это на нашем SQL Server, и он отлично работает. (SQL Server 2005)

0 голосов
/ 29 апреля 2017

попробуйте

   "ItemName LIKE '*john*' and  ItemName LIKE '*doe*'"
...