这似乎是一个愚蠢的问题,但实际上并非如此。可能是我的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查询非常少。于是我们来到这里。
那么:如何在SQLite的where子句中使用布尔字段?
IDE是SQLite Administrator。
更新:好吧,我找到了答案。显然,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非本地类型的映射都映射为字符串类型。