我在數據庫中有一列值爲NULL。我正在linq讀取這個值來得到結果,但linq不返回任何結果。 我的LINQ看起來像如果比較可空數據,則Linq不返回任何數據
dim result= (from t in <tableName> where i.id=Pid)
PID是因爲沒有通過,我的DB值由該ID爲NULL,所以這個LINQ應該返回一些結果,但它不返回。爲什麼?
我在數據庫中有一列值爲NULL。我正在linq讀取這個值來得到結果,但linq不返回任何結果。 我的LINQ看起來像如果比較可空數據,則Linq不返回任何數據
dim result= (from t in <tableName> where i.id=Pid)
PID是因爲沒有通過,我的DB值由該ID爲NULL,所以這個LINQ應該返回一些結果,但它不返回。爲什麼?
據我所知,不可能用比較運算符來測試NULL值,例如SQL中的=, <, or <>
。我們將不得不使用IS NULL and IS NOT NULL
運營商。
你可以做你想做的事,一個if statement
在宿主語言如下:
if(pid!=null)
{
dim result= (from t in <tableName> where i.id=Pid)
}
else
{
dim result= (from t in <tableName> where i.id IS NULL)
}
但它並不總是'Pid'將有價值作爲NULL ...它可以有123然後結果將完美。當Pid爲NULL時需要檢查什麼? – Akhire
這個查詢轉換成SQL具有以下where子句:
WHERE [t1].[Id] = @p1
這裏的問題是SQL中的空比較語義返回null,這不是真的,並且行被過濾。
你想要的,而是有這樣的where子句:
WHERE [t1].[Id] is null
,你可以用不同的查詢得到。
dim result= (from t in <tableName> where i.id Is Nothing)
空= NULL沒有返回true,你也許可以這樣做暗淡結果=(從噸如果其中(i.id.isnull,0,i.id)= IF(PID是什麼,0,Pid))或任何測試爲null是再次 –
Cato