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));
Другие вопросы по тегам