2013-05-15 36 views
2

我使用此代碼爲什麼空值不返回在申請的時候!=在LINQ

var items2 = from item in context.Images 
      where item.Reported != true 
      select item; 

但不是在「報道」欄目爲何返回空值?

+3

因爲null不等於true ... –

+0

您應指定item.Reported類型和您正在使用的LINQ提供程序。 – jkoreska

+0

我相信你需要item.Reported.Value!= true,如果你在你的模式中允許有空值,那麼Reported是空的。所以你有一個hasValue和值實際訪問實體真假值。 – Bearcat9425

回答

8

truefalsenull的值不同。如果同時需要進行再回到你將要查詢改成這樣:

var items2 = from item in context.Images 
      where item.Reported != true || item.Reported == null 
      select item; 
+0

它應該是或者而不是和。 –

+0

這是一個布爾操作,你不能只是去'where!item.Reported'嗎? –

+2

在C#中,'null!= true'的結果爲'true' – Andomar

1

你可以嘗試使用Object.Equals爲你想到,像這樣的效果:

var items2 = from item in context.Images 
    where !Equals(item.Reported, true) 
    select item; 

它應該像你已經描述過,返回falsenull條目。

+0

如果'item.Reported'是一個值類型,並且如果它不是 – Andomar

7

實體框架,翻譯查詢到SQL時,產生類似的代碼

select * from images 
where reported <> true 

在SQL中的任何操作上的空值使用返回FALSE(null <> true過),這就是爲什麼你沒有得到與報道的空圖像您的結果集中的值。

+0

+1,SQL就不會知道'true',所以我猜它會被轉換爲'reported <> 1'。這確實解釋了行爲! – Andomar

相關問題