我正在尝试为高级搜索编写表达式。但是,我需要检查每个属性是否为null
,否则将引发错误。
我在下面没有空检查的情况下包含了表达式。
使用jQuery dataTables输出结果。
filteredPeople = unitOfWork.PeopleRepository.Get().Where(c =>
IdSearchable && c.personID.ToString().Contains(param.sSearch.ToLower())
|| surnameSearchable && c.Surname.ToLower().Contains(param.sSearch.ToLower())
|| firstNameSearchable && c.FirstName.ToLower().Contains(param.sSearch.ToLower())
|| genderSearchable && c.Gender.ToLower().Contains(param.sSearch.ToLower())
));
答案 0 :(得分:7)
尝试下面,我基本上将所有单独的条件检查包含在括号内,以进一步提高可读性,并确保在编译器解释巨大逻辑时不会得到任何奇怪的结果。 / p>
filteredPeople = unitOfWork.PeopleRepository.Get()
.Where(c => (IdSearchable
&& c.personID != null
&& c.personID.ToString().Contains(param.sSearch.ToLower()))
|| (surnameSearchable
&& c.Surname != null
&& c.Surname.ToLower().Contains(param.sSearch.ToLower()))
|| (firstNameSearchable
&& c.FirstName != null
&& c.FirstName.ToLower().Contains(param.sSearch.ToLower()))
|| (genderSearchable
&& c.Gender != null
&& c.Gender.ToLower().Contains(param.sSearch.ToLower())));
答案 1 :(得分:1)
试试这个:
filteredPeople = unitOfWork.PeopleRepository.Get()
.Where(c => (IdSearchable
&& c.personID != null
&& c.personID.ToString().Contains(param.sSearch.ToLower()))
||
....
来自 MSDN
条件AND运算符(&&)执行其bool操作数的逻辑AND,但只在必要时才计算其第二个操作数。