checkBoxListID.SelectedValueArray = DictionaryHelper.
GetSelectedArray(
typeof
(DictionaryHelper.Enum), TypeValue);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static class DictionaryHelper { public static string [] GetSelectedArray(Type type, long selectedValue) { List< string > rstList = new List< string >(); foreach (var item in Enum.GetValues(type)) { if ((item.GetHashCode() & selectedValue) > 0) { rstList.Add(item.GetHashCode().ToString()); } } return rstList.ToArray(); } TypeValue是一个数字,
函数的目的是将这个数字通过一个枚举映射成枚举的项,以Array形式返回
这个函数怎么实现这个功能的,具体解释下函数的逐行代码,详细!谢谢!
看到没人回答,我就叙述下我的问题吧,现在的问题是这样的:
table表,id字段,type字段 ,TypeEnum枚举
Enum枚举里面有type1=1,type2=2,type3=4,type4=8,type5=64,type6=128
id type
1 67
2 132
3 14
4 72
则id=1包含的type有:type1,type2,type5(1+2+64)
id=2包含的type有:type3,type6 (4+128)
以上也可以将枚举转成二进制, type1=10,type2=100,type3=1000,type4=10000,type5=100000 ,type=1000000
67=10|100|1000=1110
以此类推,希望写到这里大神们应该能明白我的意思了
现在我想从表中取出包含type2的所有数据(也就是type值转成二进制后从右数第三个数为1),Sql该怎么写(问题到最后其实问的是Sql)
|
select * from table where type&2>0
明天去公司才能试下行不行
type&2>0是什么意思
@new_ITP: 因为你上面的枚举type2表示的值是2,那么使用表的字段type和2进行按位与运算,也就是type&2,如type=67时,type&2=2,大于0,表示type的值里存在枚举值type2,所以使用type&2>0进行筛选
@诶碧司: 我用手算了一下方法可以啊,不过因为数据不多,明天用公司的数据库再试下,谢谢!方法很赞!
明日结贴!
我擦,我一开始不知道SQL怎么写,于是到后台代码看看怎么取的,结果代码没有看懂,现在一看,豁然开朗啊