Кажется, это глупый вопрос, и все же. Это может быть моя IDE, которая меня раздражает. Здесь код (это генерируется из DbLinq):
SELECT pics$.Caption, pics$.Id, pics$.Path, pics$.Public, pics$.Active, portpics$.PortfolioID
FROM main.Pictures pics$
inner join main.PortfolioPictures portpics$ on pics$.Id = portpics$.PictureId
WHERE portpics$.PortfolioId = 1 AND pics$.Id > 0
--AND pics$.Active = 1 AND pics$.Public = 1
ORDER BY pics$.Id
Если я запустил этот запрос, я получаю три строки назад, с двумя булевыми полями, называемыми активными и общедоступными. Добавление в пронумерованную строку не возвращает строк. Изменение строки на любое из следующих значений:
pics$.Active = 'TRUE'
pics$.Active = 't'
pics$.Active = boolean(1)
Это не работает. Либо ошибки, либо нет результатов. Я искал это для поиска и нашел недостаток в реальных SQL-запросах. И вот мы здесь.
Итак: как использовать логическое поле в предложении where в SQLite?
IDE является администратором SQLite.
Обновление. Ну, я нашел ответ. Администратор SQLite позволит вам самостоятельно создавать свои собственные типы; создаваемый SQL-создатель выглядит следующим образом:
CREATE TABLE [Pictures] ([Id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[Path] VARCHAR(50) UNIQUE NOT NULL,[Caption] varchAR(50) NULL,
[Public] BOOLEAN DEFAULT '0' NOT NULL,[Active] BOOLEAN DEFAULT '1' NOT NULL)
Исправление для запроса
AND pics$.Active = 'Y' AND pics$.Public = 'Y'
Реальная проблема здесь, как указал первый ответчик, в SQLite не существует логического типа. Не проблема, а что-то, о чем нужно знать. Я использую DbLinq для создания моего уровня данных; возможно, это не должно допускать сопоставление типов, которые SQLite не поддерживает. Или он должен отображать все типы, не относящиеся к SQLite, к типу string.