我使用LINQ to SQL来检索数据,使用布尔条件(SQL中的BIT列)。我的LINQ查询看起来像这样:
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();
'Where()'以不同的方式应用,这就是我将它单独放入的原因。
当布尔值为false时,生成的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子句中的两列对它们有单独的索引)。
为什么会产生负面条件?我该如何解决?
答案 0 :(得分:0)
var query =
from r in db.Requests.Where(r => r.Completed == someBooleanVal && r.Cancelled == someOtherBool)
select r;
return query.ToList();
希望它可以帮助你,度过美好的一天。