2011-01-11 7 views
0

パラメータがnullかどうかわからないので、次のように使用します: Param!= nullならばParam == nullの場合はそのIDと を比較し、nullと比較してください。Linq:存在しない値と比較しても例外は発生しませんが、それはありません

そのような何か:

var c = from cat in context.Categories 
where ParamCat != null && cat.ParentId == ParamCat.Id 
|| 
ParamCat == null && cat.ParentId == null 
select c; 

をParamCatはすぐに私は(c.Count()例)Cから何かを取得しようとしてとしてnullの場合は、例外がスローされます。

通常、何らかの条件を使用すると、特にANDを使用すると条件が失敗するとすぐに比較が中止されます。たとえば、このコードは例外を発生させません:

if (ParamCat != null && cat.ParentId == RaramCat.Id) 
{ 
} 

もしそうなら、上記のlinqコードで例外が発生するのはなぜですか? (ヌル参照)

ありがとうございますが、その順序でそれらを評価するために、コンパイラを取得するために、グループに括弧を使用して&&表現を必要とする

答えて

1

var c = from cat in context.Categories 
where (ParamCat != null && cat.ParentId == ParamCat.Id) 
|| 
(ParamCat == null && cat.ParentId == null) 
select cat; 
+0

編集権限はありませんが、「select c」ではなく「select cat」である必要があります。 – lukiffer

+0

@lukiffer:確かに、それはすべきです。これはOPの式をコピーして貼り付けて有効性をチェックせずに取得したものです。 –

+0

ここに私の作業コードです:var cc = from c from context.Categories orderby c.CategoryName ここで(ParentCategory!= null && c.CategoryParentId == 55)|| (ParentCategory!= null && c.CategoryParentId == ParentCategory.CategoryId)// ParentCategory.CategoryId select c;結果は同じです、私は理由を理解できませんか? – mimic

0

試してみてください。

var c = from cat in context.Categories 
where (ParamCat == null && cat.ParentId == null) 
    || (ParamCat != null && cat.ParentId == ParamCat.Id) 
select cat; 

は大きな違いがあります。:)

+0

動作しません...まだnull ref例外があります。 ParamCat.Idをいくつかの具体的な数値(たとえ存在しなくても)に変更しても、例外はスローされません。 – mimic

関連する問題