В таком коде:
if (insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
где insuranceNumberSearch
равно нулю, оставшееся выражение не равно нулю в следующем коде:
var q = from ei in session.Linq<EmployeeInsurance>()
where insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())
select ei;
весь раздел выражения вычисляется независимо от того, что insuranceNumberSearch равен нулю или не равен нулю.
Я использую LINQ для NHibernate
UPDATE:
К сожалению, я неправильно указал первый фрагмент. Правильно:
if (insuranceNumberSearch == null || (insuranceNumberSearch != null && ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
или
bool b1 = insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim());
if (b1)
doSomething();
В обоих случаях, когда insuranceNumberSearch
равен null
, остальные выражения больше не оцениваются. Если такого поведения не существует, insuranceNumberSearch.Trim()
приведет к тому, что эталонный объект будет равен нулю исключение. К сожалению, LINQ (или, возможно, LINQ-to-NHibernate) не подчиняется такому хорошему поведению и оценивает все выражения, даже если insuranceNumberSearch
равно null
и приводит к ошибке.
ОБНОВЛЕНИЕ 2: Я нашел похожий вопрос: The || (или) Оператор в Linq с C #