【发布时间】:2016-03-22 11:59:33
【问题描述】:
我有一个对象层次结构:
DeathStar.Floors.Departments.Rooms
目前,我只选择包含被机器人恐吓或注入的叛军渣滓房间的部门的楼层:
var rebelScum = deathStar.Floors.Where(
f=> f.Departments.Any(
d => d.Rooms.Any(
r => r.Occupant.Allegiance == "Rebel"
&& (r.InterrogationState == Interrogation.Intimidation
|| r.InterrogationState == Interrogation.FloatyStabbyDroid)
)
)
);
但是,rebelScum 将包含与任何被审讯的反叛败类在同一部门的空房间。
我可以在这个.Where() 中过滤,只返回被占用的房间吗?
【问题讨论】:
-
在你检查了叛军的忠诚度之后,你能不能不添加
&& r.Rooms.Occupied或第二个Any()内的任何东西(哈哈) -
搜索“实体框架过滤子集合”。例如。 stackoverflow.com/questions/7079378/…。之前已经回答过很多次了。您将获得所查询内容的确切结果:any 个房间满足其余查询的所有部门。然后部门将包含他们的所有房间,您必须自己过滤。
-
使用
Select()选择您需要的值怎么样? -
“但是,rebelScum 将包含空房间” - 不,它只会包含 楼层。您的查询是楼层,而不是房间。如果您只想要房间(或部门),那就另当别论了。
-
@StuperUser:是的,因为您想要将“包括空房间的楼层”投影到“不包括空房间的楼层”。该投影本身包含过滤,但它仍然是一个投影。