2012-05-04 5 views
0

これはおそらく非常に簡単で、私は "奇妙な午後のシンドローム"に苦しんでいますが、私はlinq式を構築するのに少し問題があります。すべてのサブクエリ基準に一致するすべてのレコードを返すLINQクエリ

私は次のエンティティを持っています - Rooms、RoomsPeople、およびPersonType。

私は(人のタイプ)教師と学生を含むすべての部屋を返却しようとしています

私のクエリは文字通り、これを読んで

context.Rooms.Where(x => x.RoomsPeople.Any(b => (((b.PersonTypeID== 1) && (b.PersonTypeID== 2)) && (b.PersonTypeID== 3)))).ToList<Rooms>(); 

のラインに沿っているので、それが何をすべき見えます私は何を望んでいますか?部屋ルームにはpersonTypeのいずれかが含まれています。

誰でも助けてもらえますか?これは、あなたが欲しいものを行う必要があります

+0

"私は少し問題があります。"何がうまくいかないのかを説明する必要があります。それはコンパイルされていませんか?あなたはあなたが得ることを期待しているリストを取得していませんか? –

+0

単一の値(PersonTypeId)は同じ1,2,3であることはできません – Pawel

答えて

1

context.Rooms 
    .Where(x => 
     x.RoomsPeople.Any(b => b.PersonTypeID == 1) && 
     x.RoomsPeople.Any(b => b.PersonTypeID == 2) && 
     x.RoomsPeople.Any(b => b.PersonTypeID == 3) 
    ) 
    .ToList<Rooms>(); 

あなたは、元のコードを見れば、あなたはこの述語を持っていることがわかります:すべての

(((b.PersonTypeID== 1) && (b.PersonTypeID== 2)) && (b.PersonTypeID== 3))) 

まず、これをすることができ次のように簡略化されました:

b.PersonTypeID == 1 && b.PersonTypeID == 2 && b.PersonTypeID == 3 

ここで、コードがうまくいかなかった理由がわかります。一度あなたがに対してチェックしたい人それぞれのタイプのために - 単一PersonTypeIDは、同時に複数の異なる値(1、2、 3)

することは可能ではありませんしたがって、解決策は.Any述語を複数回使用することです。

+0

ありがとう、カーク、それは素晴らしい説明です。それは今より意味をなさない。 – Ketchup

関連する問題