如何在C#中正确格式化团队成员数据?Dapper返回问题修复
修正Dapper场景下团队-成员列表的返回格式问题
问题根源
- 实体类定义错误:
JTeam的Members属性被定义为单个JMember对象,无法存储多个成员数据 - 循环逻辑错误:在成员遍历循环内重复将团队对象添加到结果列表,导致一个团队被添加N次(N为该团队成员数)
- 数据复用污染:全局的
members列表会累积所有团队的成员,导致每个团队都包含之前所有团队的成员
修正后的代码
实体类调整
public class JTeam { public int TeamId { get; set; } public string TeamName { get; set; } public string TeamsCode { get; set; } public string Description { get; set; } public int CreatedById { get; set; } public string CreatedByName { get; set; } public string TeamProfilePhoto { get; set; } public string CoverPhoto { get; set; } public DateTime DateCreated { get; set; } // 修改为List<JMember>以支持多成员存储,默认初始化空列表 public List<JMember> Members { get; set; } = new List<JMember>(); } public class JMember { public int MemberId { get; set; } public int TeamId { get; set; } public string MemberName { get; set; } }
控制器方法调整
[HttpGet("GetMyTeamsDemo")] public async Task<List<JTeam>> GetMyTeamsDemo(int UId) { List<JTeam> teams = new List<JTeam>(); var result = await _userDataStore.GetMyTeams(UId); foreach (var item in result) { // 每个团队创建独立的JTeam实例 JTeam jteam = new JTeam(); jteam.TeamId = item.Id; jteam.TeamName = item.TeamName; jteam.TeamsCode = item.TeamsCode; jteam.Description = item.Description; jteam.CreatedById = item.CreatedById; jteam.CreatedByName = item.CreatedByName; jteam.TeamProfilePhoto = item.TeamProfilePhoto; jteam.CoverPhoto = item.CoverPhoto; jteam.DateCreated = item.DateCreated; var res = await _userDataStore.GetTeamMembersByTeamId(item.Id); if (res is not null) { // 每个团队创建独立的成员列表,避免跨团队数据污染 List<JMember> members = new List<JMember>(); foreach (var item1 in res) { members.Add(new JMember { MemberId = item1.MemberId, MemberName = item1.MemberName, TeamId = item1.TeamId }); } // 一次性将成员列表赋值给当前团队 jteam.Members = members; } // 仅在当前团队所有数据处理完成后,添加到结果列表一次 teams.Add(jteam); } return teams; }
关键改动说明
- 修正
JTeam的Members属性类型,确保能存储多个成员 - 将团队实例和成员列表的初始化移到团队循环内部,每个团队使用独立的对象,避免数据复用
- 移除成员循环内的团队添加操作,改为在团队所有数据处理完成后添加一次,确保每个团队只出现在结果中一次
- 每个团队维护自己的成员列表,避免跨团队成员数据污染
内容的提问来源于stack exchange,提问作者ABM Abdul Muttalib
相关产品推荐
相关产品推荐

