Кажется глупым вопросом, и все же. Это может быть моя 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
Если я выполню этот запрос, я получу три строки назад с двумя логическими полями, которые называются Active и Public. Добавление в закомментированную строку не возвращает строк. Изменение строки на любое из следующего:
pics$.Active = 'TRUE'
pics$.Active = 't'
pics$.Active = boolean(1)
Это не работает. Либо ошибки, либо нет результатов. Я гуглил по этому поводу и обнаружил недостаток реальных запросов SQL. И вот мы здесь.
Итак: как использовать логическое поле в предложении where в SQLite?
IDE - администратор SQLite.
Обновление : Ну, я нашел ответ. Администратор SQLite позволит вам создавать собственные типы; генерируемый SQL create выглядит следующим образом:
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, с строковым типом.