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)的情況要注意了.