台灣最大程式設計社群網站
線上人數
1264
 
會員總數:243663
討論主題:188255
歡迎您免費加入會員
討論區列表 >> ASP.NET >> Lambda的select和where遇到空值問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Lambda的select和where遇到空值問題
價值 : 50 QP  點閱數:313 回應數:6

樓主

小強
門外漢
0 24
422 30
發送站內信

各位前輩門好~~
想請教一下~~最近常使用 Linq的Lambda表示~~
但卻苦惱常常判斷不好null問題~~~常使用where或FirstOrDefault報錯~~

目前我有一個問題想理解一下~~
下面程式中~~~xxxList非null~~~但裡頭並無Code == "a1234"這個項目~~~
但是變數a第一行通過~~變數b第二行報錯~~要我檢查null~~

請問a b兩行意義不同嗎~~~感謝解惑

if(Model.xxxList!=null&& Model.xxxList.count>0){

var a = Model.xxxList.Where(r => r.Code == "a1234").Select(r => r.data).FirstOrDefault(); >>>正常通過

var b = Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault().data; >>>報錯

搜尋相關Tags的文章: [ lambda ] , [ where ] , [ select ] ,
本篇文章發表於2018-08-09 11:43
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應

本篇文章回覆於2018-08-09 12:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
null的要另外處理
本篇文章回覆於2018-08-09 12:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
不錯的參考

WEI
檢舉此回應
var b = Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault().data

因為你多查看了屬性 .data , 但從 Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault() 取出來的值是 null
所以會發生錯誤!!!

如果你 a 寫成底下這樣也會發生錯誤

var a = Model.xxxList.Where(r => r.Code == "a1234").Select(r => r.data).FirstOrDefault().data
本篇文章回覆於2018-08-10 09:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小強
檢舉此回應
如果以B的寫法來判斷null是不是如下寫法``~~~

if(Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault()!=null){

var b =Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault().data;
}

我另外查了些文章~~lambda判斷空值是否使用Any()方法來判斷呢?
本篇文章回覆於2018-08-13 10:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
最有價值解答

小魚
檢舉此回應
b不能在裡面宣告,
否則外面就用不到,
這種情況應該也不能用var,
要指定明確的類型,
另外我習慣先將 Model.xxxList.Where(r => r.Code== "a1234").FirstOrDefault() 用一個變數承接下來,
那麼長的一串看很多次不覺得很煩嗎?
而且同樣的計算動作也不要做兩次會比較好,
當然如果你覺得你電腦效能太好我是沒意見...

Any是判斷List有沒有資料的,
感覺在這裡應該不需要用...
本篇文章回覆於2018-08-13 11:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小強
檢舉此回應
謝謝小魚和WEI的指導
本篇文章回覆於2018-08-20 17:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.