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