Pages

2012/06/05

[C#] bit 型を抽出条件にする

SQL Server の bit 型というのは状態保持によく使われるが、これがなかなか面白い。
これはデータとしては数値として扱われる (TRUE = 1, FALSE = 0 ) のだが、 プログラムから抽出上限として使うには bool として扱わなければならない。
SELECT * FROM Hoge WHERE Hoge_Flag = 0
-- 文字列でもいける
SELECT * FROM Hoge WHERE Hoge_Flag = 'FALSE'
-- こんなのでもいけるw
SELECT * FROM Hoge WHERE Hoge_Flag = 'FaLsE'
しかしながら、プログラム内から (例えば LINQ)条件にしようとすると……。
var hogeDb = new HogeDBEntities();
var query = from hoge in hogeDb.Hoge_Flag == 1
   select hoge;
// 演算子 '==' を 'bool' と 'int' 型のオペランドに適用することはできません。
Entity Framework からだと、データベースの型も厳密に定義されているので実行前にこういうエラーがチェックされる。これは素晴らしい。
こういうフラグのようなものは数値型でよく定義されているのだが、設計者の好みによって 0 が無効なのか、-1 が無効なのかバラバラだが、bit で定義するのがいいのかもしれない。

bit (Transact-SQL) - msdn
null も取れるし。
Related Posts Plugin for WordPress, Blogger...