位域(可用于一个人对应多个角色,不需要建关联表)

it2022-05-05  43

/// <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;

注意:枚举对应的值,放在&后面即可

转载于:https://www.cnblogs.com/yxzs/p/11196216.html


最新回复(0)