ばかげた質問のようですが、それでも。私を騙しているのは私の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という2つのブールフィールドを持つ3つの行が返されます。コメント化された行を追加しても、行は返されません。行を次のいずれかに変更します。
pics$.Active = 'TRUE'
pics$.Active = 't'
pics$.Active = boolean(1)
動作しません。エラーまたは結果なし。私はこれをグーグルで検索し、実際のSQLクエリが不足していることを発見しました。そして、ここにいます。
だから:SQLiteのwhere句でブールフィールドを使用するにはどうすればよいですか?
IDEはSQLite管理者です。
更新:まあ、私は答えを見つけました。SQLite Administratorを使用すると、明らかに独自のタイプを作成できます。生成される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にネイティブではないすべての型を文字列型にマップする必要があります。