在这样的代码中:
if (insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
where insuranceNumberSearch
为空,在以下代码中剩余表达式不为空:
var q = from ei in session.Linq<EmployeeInsurance>()
where insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())
select ei;
无论 InsuranceNumberSearch 是否为空,表达式的所有部分都会被计算。
我正在使用 LINQ to NHibernate
UPDATE:
不幸的是我把第一个片段放错了。正确的是:
if (insuranceNumberSearch == null || (insuranceNumberSearch != null && ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
or
bool b1 = insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim());
if (b1)
doSomething();
在以上两种情况下,当insuranceNumberSearch
is null
,剩余的表达式不再被求值。如果这种行为不存在,insuranceNumberSearch.Trim()
会造成一个引用对象为空例外。遗憾的是,LINQ(或者可能是 LINQ-to-NHibernate)不遵守这种良好的行为,并且即使在以下情况下也会评估所有表达式:insuranceNumberSearch
is null
并导致错误。
更新2:我发现了一个类似的问题:|| (或)C# 中的 Linq 运算符 https://stackoverflow.com/questions/772261/the-or-operator-in-linq-with-c
打败我,但你不会用吗
if (
(insuranceNumberSearch == null) ||
ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
在你的声明中,是否在 LINQ 表达式中?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)