このようなコードでは:
if (insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
どこinsuranceNumberSearch
が null で、残りの式は次のコードでは null ではありません:
var q = from ei in session.Linq<EmployeeInsurance>()
where insuranceNumberSearch == null
? true
: ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())
select ei;
式のすべてのセクションは、insuranceNumberSearch が null であるか、null でないかに関係なく評価されます。
LINQ to NHibernate を使用しています
アップデート:
残念ながら、最初のスニペットを間違えました。正しいのは次のとおりです。
if (insuranceNumberSearch == null || (insuranceNumberSearch != null && ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()))
doSomething();
また
bool b1 = insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim());
if (b1)
doSomething();
上記の when insuranceNumberSearch
isの両方でnull
、残りの式はそれ以上評価されません。そのような動作が存在しない場合はinsuranceNumberSearch.Trim()
、参照オブジェクトが null例外になります。悲しいことに、LINQ (あるいは LINQ-to-NHibernate) は、このような優れた動作に従わず、すべての式を評価し、結果がエラーになる場合でもそうしませinsuranceNumberSearch
んnull
。
更新 2:同様の質問を見つけました: The || (または) C# を使用した Linq の演算子