为什么evaluting布尔表达式不适合普通的LINQ法律? [英] Why ordinary laws in evaluting boolean expression does not fit into LINQ?
问题描述
在这样的代码:
if (insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
其中, insuranceNumberSearch
为空,剩下的表达不为空,而在下面的代码:
where insuranceNumberSearch
is null, remaining expression is not null while in following code:
var q = from ei in session.Linq<EmployeeInsurance>()
where insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())
select ei;
表达式的所有部分,无论insuranceNumberSearch的被评估为null或is not null。
all section of expression is evaluated regardless of insuranceNumberSearch is null or is not null.
我使用LINQ to NHibernate的
I'm using LINQ to NHibernate
更新:
不幸的是我已经把第一个片断是错误的。正确的是:
Unfortunately I have put the first snippet wrong. The correct is:
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
是空
,剩下的表达式不计算了。如果这样的行为不存在, insuranceNumberSearch.Trim()
将导致的参考对象为空的异常。不幸的是LINQ(或者LINQ到NHibernate的)不服从这样一个很好的行为,即使在评估所有的表达 insuranceNumberSearch
是空
和错误的结果。
In both of above when insuranceNumberSearch
is null
, remaining expressions are not evaluated any more. If such a behavior does not exists, insuranceNumberSearch.Trim()
will cause a reference object is null exception. Sadly LINQ (or maybe LINQ-to-NHibernate) does not obey such a nice behavior and evaluate all of expression even when insuranceNumberSearch
is null
and results in error.
更新2:我发现了一个类似的问题:的http://计算器.COM /问题/ 772261 /在有或运营商在LINQ-与-C
UPDATE 2: I found a similar question: http://stackoverflow.com/questions/772261/the-or-operator-in-linq-with-c
推荐答案
节拍我,但问心无愧就不会使用
Beat me, but wth wouldn't you use
if (
(insuranceNumberSearch == null) ||
ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
在你的声明,无论是在LINQ表达或不?
in your statement, be it in the LINQ expression or not?
这篇关于为什么evaluting布尔表达式不适合普通的LINQ法律?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!