Продолжаем цикл статей на тему поиска по критерию строк в объектах DataTable.
Сегодня рассмотрим случаи формирования строк фильтрации в специфических условиях.
В прошлых статьях (поиск строк по связанным таблицам. выполнение фильтрации в объекте DataView) в методе Select и для свойства RowFilter в строке поиска/фильтрации мы указывали имена полей как есть:
MyDataView.RowFilter = "id > 47";
MyDataView.RowFilter = "Publisher Like '%ите%'".
Но для поля по имени Name такой вариант не пройдет поскольку оператор Name является служебным. В таких случаях, для точнгого указания компилятору, что Name – это название столбца, следует имена полей закрывать в квадратные скобки:
MyDataView.RowFilter = "[Name] Like '%ника молодеж%'".
//поле по имени #Name
MyDataView.RowFilter = "[#Name] Like '%толий%'";
То есть, если название столбца содержит в себе служебные символы (это # ( ) \ / = < > - + * % ~ & | ’ ^ " и [ ), то обязательно имя толбца следует помещать между парой квадратных скобок [ ].
//поле по имени [#Name
MyDataView.RowFilter = "[[#Name] Like '%толий%'";
//поле по имени +Na~me)
MyDataView.RowFilter = "[+Na~me)] Like '%толий%'";
Но если имя столбца содержит в себе правую квадратную скобку ], или(и) обратный слеш \, то их экранировать следует обратным слешем \:
//поле по имени [Name\]
MyDataView.RowFilter = "[[Name\]] Like '%толий%'";
//поле по имени [Name\\
MyDataView.RowFilter = "[[Name\\] Like '%толий%'";
Если же в значении стрингового поля содержится апостроф (одинарная кавычка), то её следует экранировать одинарной кавычкой:
//поиск на соответствие значению O'Connoly
MyDataView.RowFilter = "[Name] = 'O''Connoly'";
Если же мы работаем с дробными типами (Money, Decimal, float), то следует использовать IFormatProvider (использование IFormatProvider)
dataView.RowFilter =
String.Format(CultureInfo.InvariantCulture.NumberFormat,
"[Coast] < {0}", 315.55f);