2017-01-30 9 views
2

私はlinqクエリから結果を返そうとしています。ユーザーが職位を持っている場合、または仕事に職位がない場合。私は、ジョブに指定されたポジションがない場合、結果が返されない理由を理解できません。ICollectionが空のときに結果を返すためのLinqクエリ。

質問は次のとおりです。

var feedQuery = from o in _context.Jobs 
       from pos in o.Positions 
       where 
       positions.Contains(pos.Id) || !o.Positions.Any() 
       select o; 

ジョブがポジションを持っているのにうまく動作しますが、job.Positions Icollectionが空の場合は正しく動作しません。

誰でも私が間違っていることを教えてもらえますか?前もって感謝します。

答えて

2

誰かが私に間違っていることを教えてもらえますか?

from pos in o.Positions 

は、内側ジョブ(1)及びジョブ位置(ゼロまたは多数)の間に参加作成します。結果は、ポジションが多い場合にジョブレコードを掛け、関連するポジションなしでジョブをフィルタリングします(where句に関係なく)。

それを動作させるために、あなたがその文を削除し、多くの側のAnyベースWhere基準(SQL​​句に相当)を使用する必要があります。

var feedQuery = 
    from o in _context.Jobs 
    where !o.Positions.Any() || o.Positions.Any(pos => positions.Contains(pos.Id)) 
    select o; 
+2

はどうもありがとうございました。なぜそれが機能していなかったのか、私は非常に感謝しています。コードに自分自身を教えるので、非常に便利な入力です。私はあなたが私の質問のいくつかに今答えるかもしれないと思います。あなたのような人々があなたの専門知識を提供することがとても嬉しいようであることは素晴らしいことです。 –

関連する問題