SQLite.Net-PCL Нет такой функции: ToString
У меня есть таблица сотрудников с Name
(строка) и Number
(int) столбцы.
Я могу искать сотрудников для чего угодно. Так,
var query = cnn.Table<Employees>()
.Where(x => x.Name.Contains(search) ||
x.Number.ToString().Contains(search));
Исключение типа "SQLite.Net.SQLiteException" произошло в SQLite.Net.Platform.WinRT.dll, но не было обработано в коде пользователя
Дополнительная информация: нет такой функции: tostring
Как я могу привести числовой столбец к строке?
Спасибо.
1 ответ
Решение
Проблема в том, что SQLLite linq не знает, что ToString()
- это метод C#, который можно переопределить, чтобы сделать что-нибудь. Вы должны использовать SqlFunctions
:
var query = cnn.Table<Employees>()
.Where(x => x.Name.Contains(search) ||
SqlFunctions.StringConvert((int)x.Number).Contains(search));
Другим решением может быть добавление .ToList()
/ AsEnumerable()
перед where
но тогда эта фильтрация будет происходить в C# вместо базы данных
Можно также:
var query = cnn.Table<Employees>()
.Where(x => x.Name.Contains(search) || x.Number > 0)
.AsEnumerable()
.Where( x => x.Number.ToString().Contains(search));