1

これはおそらく非常に単純で、「金曜日の午後のシンドローム」に苦しんでいますが、linq式を作成するのに少し問題があります。

次のエンティティがあります-Rooms、RoomsPeople、およびPersonType。

先生と生徒(人のタイプ)がいるすべての部屋を返却しようとしています

だから私のクエリは

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

これを文字通り読むと、私が望むことを実行するはずです...「RoomsPeopleにpersonTypesのいずれかが含まれている部屋を返す」

誰か助けてもらえますか?

4

1 に答える 1

2

これはあなたが望むことをするはずです:

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述語を複数回使用することです。つまり、チェックする人のタイプごとに1回です。

于 2012-05-04T17:11:57.463 に答える