如何用Linq过滤对象内嵌套的players列表,仅保留available状态球员?
使用LINQ过滤嵌套球员列表,仅保留可用状态球员
完全可以通过LINQ实现这个需求,核心思路是遍历每个球队,对其球员列表做过滤,保留状态为available的球员,同时保留原球队的名称信息。
第一步:定义对应实体类
首先需要在C#中定义匹配数据结构的类和枚举:
// 球员状态枚举 public enum PlayerStatus { Available, Unavailable, Unknown } // 球员类 public class Player { public string Name { get; set; } public PlayerStatus Status { get; set; } } // 球队类 public class Team { public string TeamName { get; set; } public List<Player> Players { get; set; } }
第二步:LINQ过滤实现
假设你已经有了List<Team> teams数据源,使用LINQ的Select和Where方法即可完成过滤:
// 生成过滤后的球队列表(创建新对象,不修改原数据) var filteredTeams = teams.Select(team => new Team { TeamName = team.TeamName, // 过滤当前球队中状态为Available的球员 Players = team.Players.Where(player => player.Status == PlayerStatus.Available).ToList() }).ToList();
如果需要直接修改原球队对象的球员列表(而非创建新对象),可以用遍历+赋值的方式:
foreach (var team in teams) { team.Players = team.Players.Where(p => p.Status == PlayerStatus.Available).ToList(); }
效果验证
输入数据:
teams: [ { "teamName": "Bayern", "players":[ { "name": "Neuer", "status": "available" }, { "name": "Muller", "status": "unavailable" }, { "name": "Pavard", "status": "unknown" } ] }, { "teamName": "Borrusia", "players":[ { "name": "Haller", "status": "available" }, { "name": "Modeste", "status": "unavailable" } ] } ]
过滤后输出结果:
teams: [ { "teamName": "Bayern", "players":[ { "name": "Neuer", "status": "available" } ] }, { "teamName": "Borrusia", "players":[ { "name": "Haller", "status": "available" } ] } ]
内容的提问来源于stack exchange,提问作者konrad8767
相关产品推荐
相关产品推荐

