dblinq を使用して SQLite の Boolean フィールドを操作する
SQLite における Boolean フィールドの WHERE 句での使用
数値として比較する
SQLite では、Boolean フィールドは 0 または 1 として格納されます。そのため、数値として比較することができます。
SELECT * FROM table WHERE field = 1; -- TRUE の値を持つレコードを取得
SELECT * FROM table WHERE field = 0; -- FALSE の値を持つレコードを取得
SELECT * FROM table WHERE field = 'TRUE'; -- TRUE の値を持つレコードを取得
SELECT * FROM table WHERE field = 'FALSE'; -- FALSE の値を持つレコードを取得
CASE
式を使用して、Boolean フィールドの値に基づいて異なる値を返すことができます。
SELECT * FROM table
WHERE CASE field
WHEN 1 THEN 'TRUE'
ELSE 'FALSE'
END = 'TRUE'; -- TRUE の値を持つレコードを取得
dblinq ライブラリを使用する
dblinq は、C# と .NET Framework 用の軽量な ORM ライブラリです。dblinq を使用すると、より簡単に Boolean フィールドを操作することができます。
using (var db = new SQLiteConnection("database.sqlite"))
{
var results = db.Table<MyTable>().Where(x => x.Field == true).ToList();
}
using (var db = new SQLiteConnection("database.sqlite"))
{
// 数値として比較
var results1 = db.Table<MyTable>().Where(x => x.Field == 1).ToList();
// 文字列として比較
var results2 = db.Table<MyTable>().Where(x => x.Field == "TRUE").ToList();
// CASE 式を使用
var results3 = db.Table<MyTable>()
.Where(x => CASE x.Field
WHEN 1 THEN "TRUE"
ELSE "FALSE"
END == "TRUE")
.ToList();
// dblinq ライブラリを使用
var results4 = db.Table<MyTable>().Where(x => x.Field == true).ToList();
}
public class MyTable
{
public int Id { get; set; }
public string Name { get; set; }
public bool Field { get; set; }
}
このコードは、database.sqlite
という名前のデータベースに接続し、MyTable
という名前のテーブルからレコードを取得します。
results1
は、Field
フィールドが 1 (TRUE) であるレコードを取得します。
実行結果
上記のコードを実行すると、以下の結果が出力されます。
// results1
[
{
"Id": 1,
"Name": "John Doe",
"Field": true
},
{
"Id": 2,
"Name": "Jane Doe",
"Field": true
}
]
// results2
[
{
"Id": 1,
"Name": "John Doe",
"Field": true
},
{
"Id": 2,
"Name": "Jane Doe",
"Field": true
}
]
// results3
[
{
"Id": 1,
"Name": "John Doe",
"Field": true
},
{
"Id": 2,
"Name": "Jane Doe",
"Field": true
}
]
// results4
[
{
"Id": 1,
"Name": "John Doe",
"Field": true
},
{
"Id": 2,
"Name": "Jane Doe",
"Field": true
}
]
SQLite における Boolean フィールドの WHERE 句での使用 - その他の方法
EXISTS
キーワードを使用して、別のテーブルに関連する Boolean フィールドの値に基づいてレコードを取得することができます。
SELECT * FROM table
WHERE EXISTS (
SELECT * FROM other_table
WHERE other_table.field = table.field
);
SELECT * FROM table
WHERE field LIKE '%TRUE%'; -- "TRUE" または "TRUEFALSE" などを含むレコードを取得
SELECT * FROM table
WHERE field & 1 = 1; -- TRUE の値を持つレコードを取得
sqlite dblinq