,如果我有这样的LINQ to SQL查询:为什么LINQ到SQL生成这个SQL语句比较
var query = from x in db.XTable
select x.y == 123; // the y column is nullable!
List<bool> list = query.ToList();
它会生成一个SQL语句,将包含此:
(CASE
WHEN [t0].[y] = 123 THEN 1
WHEN NOT ([t0].[y] = 123) THEN 0
ELSE NULL
END)
这将引发错误,导致null无法分配给bool。我知道为什么发生这种情况(因为在SQL比较与空永远是假的),但我不知道为什么的LINQ to SQL不使用stetement这样的:
(CASE
WHEN [t0].[y] = 123 THEN 1
ELSE 0
END)
这会工作。
我可以推LINQ to SQL来做到这一点吗?
从技术上讲,SQL中与null的比较总是'unknown',而不是'false',否则'IF(NOT NULL = 1)'是真的,但事实并非如此。 'NULL = 1'是'unknown','NOT unknown'是'unknown',它不是'TRUE'。 –