Afs*_*bbi 4 c# linq linq-to-nhibernate
在这样的代码中:
if (insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
Run Code Online (Sandbox Code Playgroud)
where insuranceNumberSearch为null,在以下代码中,其余表达式不为null:
var q = from ei in session.Linq<EmployeeInsurance>()
where insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())
select ei;
Run Code Online (Sandbox Code Playgroud)
无论insuranceNumberSearch是null还是非null,都会计算表达式的所有部分.
我正在使用LINQ到NHibernate
更新:
不幸的是,我把第一个片段错了.正确的是:
if (insuranceNumberSearch == null || (insuranceNumberSearch != null && ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
Run Code Online (Sandbox Code Playgroud)
要么
bool b1 = insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim());
if (b1)
doSomething();
Run Code Online (Sandbox Code Playgroud)
在两种以上时insuranceNumberSearch是null,剩余表达式不评估任何更多.如果这样的行为不存在,insuranceNumberSearch.Trim()将导致引用对象为空异常.遗憾的是,LINQ(或者LINQ-to-NHibernate)不服从这样一个好的行为并且即使在出现错误时insuranceNumberSearch也会评估所有表达式null.
更新2:我发现了一个类似的问题:|| (或)Linq中使用C#的操作员
打败我,但你不会用
if (
(insuranceNumberSearch == null) ||
ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
Run Code Online (Sandbox Code Playgroud)
在你的语句中,是否在LINQ表达式中?
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |