位域(可用于一个人对应多个角色,不需要建关联表)
/// <summary> /// 参会人角色 /// </summary> [Flags] public enum AttendeeRoleEnum { [Description("所有")] All = -1, [Description("其他")] None = 0, [Description("参会人")] Registrant = 1, [Description("演讲嘉宾")] Speaker = 2, [Description("随行人员")] Guest = 4, [Description("作者")] Author = 8, [Description("普通观众")] Purchaser = 16, [Description("工作人员")] Personnel = 32, [Description("评审专家")] EssayExpert = 64, }
注意:枚举上要加上[Flags]
如果一个人参会人:数据库的值是1,如果是参会人又是评审专家,那值就等于65...
数据库值:
/// <summary> /// 参会人角色(这里存的是flags值,查询要用 & 查询) /// </summary> public int AttendeeRole { get; private set; }
赋值:
/// <summary> /// 设置角色 (这里需要在之前的位域前增加角色,不能直接赋值) /// </summary> /// <param name="role"></param> public void SetAttendeeRole(AttendeeRoleEnum role) { AttendeeRoleEnum flags = (AttendeeRoleEnum)AttendeeRole; AttendeeRole = (int)(flags | role); }
移除相应的枚举值:
/// <summary> /// 清除相关角色 (这里需要在之前的位域前增加角色,先移除,不能直接赋值) /// </summary> /// <param name="role"></param> public void ClearAttendeeRole(List<AttendeeRoleEnum> roleEnums) { var roleFlags = (AttendeeRoleEnum)AttendeeRole; foreach (var item in roleEnums) { if (roleFlags.HasFlag(item)) { roleFlags = roleFlags ^ item; } } AttendeeRole = (int)roleFlags; }
将值转化为集合:
/// <summary> /// 该参会人拥有的角色 /// </summary> public List<AttendeeRoleEnum> AttendeeRoles { get { List<AttendeeRoleEnum> roles = new List<AttendeeRoleEnum>(); var roleFlags = (AttendeeRoleEnum)AttendeeRole;// 比如数据库里的AttendeeRole = 65 ,那么这样得到的值是 Registrant|EssayExpert if (roleFlags.HasFlag(AttendeeRoleEnum.Registrant)) { roles.Add(AttendeeRoleEnum.Registrant); } if (roleFlags.HasFlag(AttendeeRoleEnum.Speaker)) { roles.Add(AttendeeRoleEnum.Speaker); } if (roleFlags.HasFlag(AttendeeRoleEnum.Guest)) { roles.Add(AttendeeRoleEnum.Guest); } if (roleFlags.HasFlag(AttendeeRoleEnum.Author)) { roles.Add(AttendeeRoleEnum.Author); } if (roleFlags.HasFlag(AttendeeRoleEnum.Purchaser)) { roles.Add(AttendeeRoleEnum.Purchaser); } if (roleFlags.HasFlag(AttendeeRoleEnum.Personnel)) { roles.Add(AttendeeRoleEnum.Personnel); } if (roleFlags.HasFlag(AttendeeRoleEnum.EssayExpert)) { roles.Add(AttendeeRoleEnum.EssayExpert); } return roles; } }
mysql中查询:
SELECT id,attendee_role FROM attendee WHERE attendee_role&64;
注意:枚举对应的值,放在&后面即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!