LinQ中為null的判斷解決方案

2021-08-25 10:34:03 字數 2201 閱讀 3116

先看部門表設計和資料:

注意:pid為父部門的id號,如果是頂級部門則沒有pid(pid為null)

如果要查詢為null的pid,我們知道sql語句應該是:

select * from depart where pid is null

很多人用linq寫成:

code:

int?pid=null;

listdepartlist=context.depart.where(c=>c.pid==pid).tolist();

但是,結果departlist.count確為0.!怎麼回事呢?檢視linq生成的sql語句才發現是=null判斷,而不是is null判斷。

code:

companydatacontextcontext=newcompanydatacontext();

int?parentdepartid=null;

iqueryablequery=null;

//獲取頂級部門的子部門數量

query=fromdepartincontext.depart

wheredepart.pid==parentdepartid

selectdepart;

/*select[t0].[id],[t0].[name],[t0].[pid]

from[dbo].[depart]as[t0]

where[t0].[pid]=@p0*/

listdepartlist=query.tolist();

console.writeline("count=",departlist.count);//count=0

query=fromdepartincontext.depart

wherenullable.equals(depart.pid,parentdepartid)

selectdepart;

/*select[t0].[id],[t0].[name],[t0].[pid]

from[dbo].[depart]as[t0]

where[t0].[pid]isnull*/

departlist=query.tolist();

console.writeline("count=",departlist.count);//count=2

parentdepartid=1;

//獲取1號部門的子部門數量

query=fromdepartincontext.depart

wheredepart.pid==parentdepartid

selectdepart;

/*select[t0].[id],[t0].[name],[t0].[pid]

from[dbo].[depart]as[t0]

where[t0].[pid]=@p0*/

departlist=query.tolist();

console.writeline("count=",departlist.count);//count=0

query=fromdepartincontext.depart

wherenullable.equals(depart.pid,parentdepartid)

selectdepart;

/*select[t0].[id],[t0].[name],[t0].[pid]

from[dbo].[depart]as[t0]

where([t0].[pid]isnotnull)and([t0].[pid]=@p0)*/

departlist=query.tolist();

console.writeline("count=",departlist.count);//count=2

為了演示,我採用了query查詢,因為這樣才能看到sql語句,現在我們看,如果要查詢為null的結果,應該採用nullable.equals()判斷。注意第二個query,where nullable.equals(depart.pid, parentdepartid)這樣才能生成is null的sql,當parentdepartid不為null時,生成sql:where ([t0].[pid] is not null) and ([t0].[pid] = @p0)。

所以:當資料庫字段可以為空時,應採用nullable.equals()判斷,而不應該用==或equals。

getActionBar為null的解決辦法

在使用 actionbar的時候,有時候會爆出空指標異常,這是因為應用沒有獲取到 actionbar 導致的,而導致應用沒有獲取到 actionbar 的原因比較多,所以我們下面就來總結一下 actionbar 獲取不到的錯誤原因。檢查你的應用是否設定了沒有 actionbar 的主題theme,或...

json decode結果為null的解決方法

傳引數時,有時需要傳陣列,但是陣列不方便傳輸,所以通常會轉化為json串傳輸。接收到引數需要用json decode處理。mixed json decode string js on bool assoc false int de pth 512 i ntoptions 0 json var dum...

判斷JavaScript物件為null或者屬性為空

首先說下null與undefined區別 對已宣告但未初始化的和未宣告的變數執行typeof,都返回 undefined null表示乙個空物件指標,typeof操作會返回 object 一般不顯式的把變數的值設定為undefined,但null相反,對於將要儲存物件的變數,應明確的讓該變數儲存nu...