You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ从嵌套列表中返回Room类型的列表?

实现GetRoomForRabbitOwners方法筛选符合条件的Room列表

需求明确:实现API端点方法GetRoomForRabbitOwners,返回所有未饲养Cat或Owl的Room列表——只要房间内存在任意一只禁养宠物(Cat/Owl),就不能纳入结果。此前的错误实现返回了Tenant类型列表,现在必须确保返回Room类型集合。

完整实现代码

假设你有一个获取所有房间的异步数据源(比如仓储接口IRoomRepository),以下是正确的方法实现:

public async Task<List<Room>> GetRoomForRabbitOwners() 
{
    // 替换为你项目中实际的房间数据查询逻辑(需关联加载Residents)
    var allRooms = await _roomRepository.GetAllAsync();

    // 筛选符合条件的房间:排除所有包含Cat或Owl的房间
    var eligibleRooms = allRooms
        .Where(room => !room.Residents.Any(resident => 
            resident.PetType == PetType.Cat || resident.PetType == PetType.Owl))
        .ToList();

    return eligibleRooms;
}

逻辑说明

  1. 数据源获取:首先异步获取系统中所有Room的完整列表,若使用EF Core,可写成await _dbContext.Rooms.Include(r => r.Residents).ToListAsync(),确保关联加载居民数据。
  2. 筛选条件:
    • 对每个房间,检查其所有居民(Residents)中是否存在PetType为Cat或Owl的情况
    • 用!取反,只保留没有任何禁养宠物的房间
    • 空房间(Residents为空集合)会自动符合条件,因为Any在空集合时返回false,取反后为true

示例数据验证

根据你提供的JSON示例数据:

  • Room id=1:存在居民Nicol(petType=3,对应Owl),会被排除
  • Room id=2:居民Rambo的petType=2(Rabbit),符合条件,会被保留
  • Room id=3、4、5:无居民,符合条件,会被保留

最终返回的Room列表包含id=2、3、4、5的房间。

内容的提问来源于stack exchange,提问作者Erik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:40:58