Lambda 和 SQL 關於對 Null情況的查詢


 lamebda 查詢後必須要select ,不然不出來數據。

數據庫查詢

Linq 查詢

在C#中,存在一種特殊的類型,Nullable的類型,這個類型可以爲空的狀態。
在數據庫中,如果類型允許爲空,就會有NULL的字段
在Lamda查詢表達式中,對於數據庫中爲空的情況也要特殊的注意一下

在SQL的查詢中,如果存在爲空的字段,例如

------------------------------------
table Test
------------------------------------
 A               B              C
 1               NULL           2
 2               true           2
 3               false          2
------------------------------------
我們要查詢 不爲真的情況,我們用
 
 select Count(*) from Test where B<>true
此時查詢的結果是隻有一條
------------------------------------
 A               B              C
 3               false          2
------------------------------------
如果按照正常的邏輯來考慮,應該是2條的,如下
------------------------------------
 A               B              C
 1               NULL           2
 3               false          2
------------------------------------
但是由於Null字段的特殊性,在查詢的時候爲

 select Count(*) from Test where B is Null 才能夠查詢到
------------------------------------
 A               B              C
 1               NULL           2
------------------------------------
這條記錄,因此我們要查詢這樣的數據,就不能夠用不等於進行查詢,要用或者來進行查詢
 select Count(*) from Test where B is Null or B=false


在Linq的查詢中同理,我們用Lamd表達式查詢,如果爲三態的情況,我們想要其中的另兩個結果,此時也要用or來進行連接

如:
   Tests 爲表Test的集合
Tests.where(p=>p.B!=true) 這樣查詢時不會得到正確的結果的,原因很簡單,就是因爲Null的字段不會自動翻譯
因此正確的查詢結果是
Tests.where(p=>p.B==false||p.B==null)
此時查詢就爲正確的結果,當然我們可以利用這種特性,查詢的時候可以查詢所有的有效數據,避免掉那些爲空的數據。

OK,關於Lambda查詢和SQL查詢 字段爲空(NULL)的情況要注意了.

發佈了84 篇原創文章 · 獲贊 29 · 訪問量 77萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章