Установите DataView (или DataTable.DefaultView) RowFilter для пользовательского типа

Я разрабатываю приложение для фильтрации datagridview. Я использую свойство RowFilter представления данных для фильтрации данных. Моя таблица базы данных содержит поля типа данных int и varchar. И я хочу использовать запрос «LIKE» в свойстве RowFilter для фильтрации представления данных, но «LIKE» используется только для строкового типа данных, а не для типа данных int. Итак, я хочу преобразовать поле типа данных int в тип данных varchar, но я не хочу изменять структуру таблицы. Я просто хочу, чтобы тип данных был временно изменен только для моего условия фильтрации.

Может ли кто-нибудь помочь мне в решении этой проблемы?

string colname="ProductID";
string condition="111";
DataView dv = new DataView();
dv.Table = ds.Tables[0] ;
dv.RowFilter ="CAST ("+colname+" AS TEXT) LIKE '"+ condition+"%'"  ;

person priyanka    schedule 26.02.2011    source источник


Ответы (3)


RowFilter выполняется .NET, а не SQL Server. Он поддерживает ограниченный набор выражений, описанных в документации Framework.

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

Вы должны иметь возможность использовать LIKE, а также CONVERT, но, в отличие от SQL-сервера, ему нужен тип .NET.

dv.RowFilter ="CONVERT("+colname+", System.String) LIKE '"+ condition+"%'"  ;
person harpo    schedule 26.02.2011
comment
Я пробовал ваш код, но он выдает ошибку как недопустимое имя типа «Строка». - person priyanka; 26.02.2011
comment
Попробуйте System.String. Я обновил ответ. Также читайте документацию. - person harpo; 26.02.2011
comment
Большое спасибо. У меня была точно такая же ошибка, и я никогда не мог понять, что фильтрация на самом деле выполняется .NET, а не SQL CE. - person VictorEspina; 18.01.2014

Вы можете привести целое число...

  SELECT * FROM table WHERE CAST(field AS TEXT) LIKE '%123%'
person Brandon Frohbieter    schedule 26.02.2011
comment
Я пробовал ваш код, но он выдает ошибку, поскольку выражение содержит неопределенный вызов функции CAST(). - person priyanka; 26.02.2011
comment
да, я использую SQL-сервер. Но я думаю, что вы не внимательно прочитали мой вопрос. - person priyanka; 26.02.2011
comment
Кажется, я понимаю это, но я не думаю, что вы можете использовать varchar. После вашего CAST нет пробела, не так ли? - person Brandon Frohbieter; 26.02.2011

вы можете использовать либо

Convert(varchar(20),value)

or

cast(value is varchar)
person Deepak    schedule 26.02.2011
comment
но выдает ошибку, так как выражение содержит неопределенный вызов функции varchar(). - person priyanka; 26.02.2011