LINQ to SQL在WHERE子句中生成负面条件

时间:2010-09-08 06:57:26

标签: linq-to-sql

我使用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子句中的两列对它们有单独的索引)。

为什么会产生负面条件?我该如何解决?

1 个答案:

答案 0 :(得分:0)

var query = 
    from r in db.Requests.Where(r => r.Completed == someBooleanVal && r.Cancelled == someOtherBool)
    select r;

    return query.ToList();

希望它可以帮助你,度过美好的一天。