4

高度な検索の式を書き込もうとしています。ただし、各プロパティがnullであるかどうかを確認する必要があります。そうしないと、エラーがスローされます。

以下の 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())
));
4

2 に答える 2

7

以下を試してみてください。基本的に、個々の条件付きチェックをすべて括弧内にラップして、読みやすさと、その巨大なロジックのコンパイラーの解釈で奇妙な結果が得られないようにします。

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())));
于 2013-03-14T10:33:54.893 に答える
1

これを試して:

filteredPeople = unitOfWork.PeopleRepository.Get()
                .Where(c => (IdSearchable
                     && c.personID != null
                     && c.personID.ToString().Contains(param.sSearch.ToLower()))
                   ||
                     ....

MSDNから

条件付き AND 演算子 (&&) は、bool オペランドの論理 AND を実行しますが、必要に応じて 2 番目のオペランドのみを評価します。

于 2013-03-14T10:32:13.413 に答える