这可能非常简单,我患有“firday afternoon综合症”但我在构建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的房间”
有人可以帮忙吗?
答案 0 :(得分: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
谓词 - 对于您要检查的每个人类型一次。