2012-08-28 64 views
0

我試圖選擇'Value'列爲空或空白的所有行。它是nvarchar類型,允許爲空值。查詢執行爲1等於1而不是空值檢查

執行時,以下查詢不會生成正確的sql。

current.Where(
      a => 
      a.Data.All(ad => ad.AccountTag.Id != currentTag.Item1) 
      || a.Data.Any(ad => ad.AccountTag.Id == currentTag.Item1 && string.IsNullOrWhiteSpace(currentTag.Item2))) 

的string.IsNullOrWhiteSpace功能轉換爲1 /* @p3 */ = 1

我使用上述功能,並且還使用currentTag.Item2 == null || currentTag.Item2.Equals(string.Empty)都具有相同的結果嘗試。

完整的SQL下面

select data2_.Id from [isnapshot.Client].[dbo].AccountData data2_ 
    where account0_.Id = data2_.ClientAccountId 
    and data2_.AccountTagId = 1 /* @p2 */ 
    and 1 /* @p3 */ = 1) 

回答

2

查詢是正確的。 currentTag是與查詢無關的局部變量。因此,表達式string.IsNullOrWhiteSpace(currentTag.Item2)將在之前被評估爲,它甚至會被轉換爲SQL,結果爲true(1)或false(0),這將是值p3

+0

只有當別人看你的代碼時,你纔會意識到你是個白癡。 'currentTag.Item2'應該是'ad.Value'如果你沒有指出它,永遠不會注意到。謝謝 – JConstantine

+0

@JLevett:有時候你只是對最明顯的事情失明。偶爾每個人都會遇到這種情況:-) –

相關問題