换了新工作,接触到了新的环境,新的项目接触到了新的知识。呵呵,新知识之一:枚举。这最基本的知识了,早都接触过,但是用的地方还不太多。仔细了解一下,发现能用到地方还真不少。
应用场景:
像这样表单中存多选的,估计谁都遇到过,解决方法当然也很多。
方法1:
数据字段设成nvarchar,保存格式如 |id1|id2|id3|,我之前项目就是这样做的,完成需求绝对不成问题:提取选择 id2 的数据时,只要该字段中出现 |id2| 文字数据就OK。
方法2:
另外创建一个表,也就所说的一对多,表连接,提取时 inner join就行了
方法3:
用枚举。上代码:
定义枚举:
/// <summary> /// 企业业务类型 /// </summary> [Flags] public enum EnumTrade { 电台广告代理 = 0x01, 电台广告策划 = 0x02, 节目制作 = 0x04, 节目发行 = 0x08, 音频制作 = 0x10, 其他 = 0x20 }
对枚举位标志不太了解的可以看看 关于枚举的种种 。
以此做为数据源,我们可以写一个读取的方法,读取成可以绑定到控件的数据源或者自定义实呈现。当然,文本值(text)就是Enum的Name,而标识值(value)就是Enum的Value。数据库的字段可以建一个int类型的,存储的是 id1 | id2 | id5的结果。注意此时的 | 是 按位否操作符,我们存储的结果是所选的value的按位否操作后的结果。提取选择了 id2 的数据时,执行对应字段 与 id2 执行 按位与 操作的结果不为0就行了。
呵呵,不用多说,按位操作也是最基本的操作,比起来模糊查询或连接表,效率肯定要高很多了,并且用枚举好处也是相当多,因为一个枚举本身包含两个值,不管获取值,还是获取Name都是相当方便。对于这样的一条包含name和value的数据对象来说枚举都是相当的方便和高效。
但是这种解决方法也不是完美的,只适合数据类型不是太多的情况。例如你的物品面向城市是可以多选的,几千个城市,嗯,还是表连接来的更实际,哈哈。
总结:枚举是个好东西。