[英]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.