1
我正在使用LINQ to SQL来检索数据,使用布尔条件(SQL中的BIT列)。我的LINQ查询看起来是这样的:LINQ to SQL在WHERE子句中生成否定条件
var query = from r in db.Requests
select r;
query = query.Where(r => r.Completed == someBooleanVal);
query = query.Where(r => r.Cancelled == someOtherBool);
return query.ToList();
的“阿凡()”被以不同的方式应用,这就是为什么我把它分开。
当布尔值以虚假的,生成的SQL看起来是这样的:
SELECT [t0].[col1], [t0].[col2], [t0].[col3], [t0].[etc]
FROM [dbo].[Requests] AS [t0]
WHERE (NOT(([t0].[Cancelled]) = 1) AND (NOT(([t0].[Completed]) = 1)
在什么我会用代替
:
WHERE [t0].[Cancelled] = 0 AND [t0].[Completed] = 0
此运行速度非常,非常缓慢。我强烈怀疑这是因为它生成的布尔值的负面条件(所有选定的列都被索引覆盖,并且where子句中的两列有一个单独的索引)。
它为什么会产生负面条件?我该如何解决它?
您是否尝试过执行'清理'(即非负面条件)SQL,以查看与Linq生成的SQL相比如何执行? – 2010-09-08 06:59:53
位域可能为空吗? – leppie 2010-09-08 06:59:53
我已经尝试过与非负面条件。在我做的一个测试中:在非负面条件下,查询不到一秒钟。使用生成的查询,它需要超过3秒钟。 – avesse 2010-09-13 12:24:50