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、23)

因此,解决方案是.Any多次使用谓词——对于您要检查的每个人类型一次。

于 2012-05-04T17:11:57.463 回答