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

如何在C#中正确格式化团队成员数据?Dapper返回问题修复

修正Dapper场景下团队-成员列表的返回格式问题

问题根源

  1. 实体类定义错误:JTeam的Members属性被定义为单个JMember对象,无法存储多个成员数据
  2. 循环逻辑错误:在成员遍历循环内重复将团队对象添加到结果列表,导致一个团队被添加N次(N为该团队成员数)
  3. 数据复用污染:全局的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:30:54