[英]LINQ List gives null exception in where Clause
var q = from p in query
where
((criterias.birthday == p.BirthDay|| criterias.birthday == null))
&& ((criterias.marriageDate == null || criterias.marriageDate == p.MarriageDate))
&& ((criterias.gender == p.Gender) || (criterias.gender == null))
&& ((criterias.nationalities.Contains(p.Nationality)) || (criterias.nationalities == null))
條件isa類,我存儲我的搜索條件。 國籍是一個字符串列表。 當我沒有字符串中的項目時,會發生問題。 查詢拋出空引用異常。 查詢不接受國籍的空值。 我怎樣才能解決這個問題?
顛倒順序,以使空檢查出現在查詢之前:使用||
,僅當第一部分的計算結果為false時,才對表達式的第二部分進行計算:
&& ((criterias.nationalities == null) ||
(criterias.nationalities.Contains(p.Nationality)))
看這些2:
((criterias.birthday == p.BirthDay|| criterias.birthday == null))
&& ((criterias.marriageDate == null || criterias.marriageDate == p.MarriageDate))
我認為結婚日期不會給您帶來麻煩,但生日會使用錯誤的順序。
在這種情況下,您需要||
的“短路評估”屬性。 ,將其更改為:
(criterias.birthday == null || criterias.birthday == p.BirthDay)
&& (criterias.marriageDate == null || criterias.marriageDate == p.MarriageDate)
嘗試交換國籍檢查的順序。 在嘗試評估包含之前,它應該使null檢查短路。
((criterias.nationalities == null) || (criterias.nationalities.Contains(p.Nationality)))
扭轉這句話:
(criterias.nationalities.Contains(p.Nationality)) || (criterias.nationalities == null)
這樣它讀
(criterias.nationalities == null) || (criterias.nationalities.Contains(p.Nationality))
如果第一個操作數的值為true,則第二個操作數將被跳過。
嘗試先檢查是否為null,然后嘗試檢查是否包含:
var q = from p in query
where
((criterias.birthday == p.BirthDay|| criterias.birthday == null))
&& ((criterias.marriageDate == null || criterias.marriageDate == p.MarriageDate))
&& ((criterias.gender == p.Gender) || (criterias.gender == null))
&& ((criterias.nationalities == null) || (criterias.nationalities.Contains(p.Nationality))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.