首页 新闻 会员 周边 捐助

枚举,二进制,sql

0
悬赏园豆:20 [已解决问题] 解决于 2014-08-29 10:10
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
 
比如现在数据表table有如下条数据
 
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)
 
 
麦田清风的主页 麦田清风 | 初学一级 | 园豆:7
提问于:2014-08-28 19:48
< >
分享
最佳答案
0
select * from table where type&2>0
收获园豆:20
诶碧司 | 小虾三级 |园豆:1912 | 2014-08-28 21:14

明天去公司才能试下行不行

麦田清风 | 园豆:7 (初学一级) | 2014-08-28 21:27

type&2>0是什么意思

麦田清风 | 园豆:7 (初学一级) | 2014-08-28 21:43

@new_ITP: 因为你上面的枚举type2表示的值是2,那么使用表的字段type和2进行按位与运算,也就是type&2,如type=67时,type&2=2,大于0,表示type的值里存在枚举值type2,所以使用type&2>0进行筛选

诶碧司 | 园豆:1912 (小虾三级) | 2014-08-28 22:13

@诶碧司: 我用手算了一下方法可以啊,不过因为数据不多,明天用公司的数据库再试下,谢谢!方法很赞!

明日结贴!

麦田清风 | 园豆:7 (初学一级) | 2014-08-28 22:26

我擦,我一开始不知道SQL怎么写,于是到后台代码看看怎么取的,结果代码没有看懂,现在一看,豁然开朗啊

麦田清风 | 园豆:7 (初学一级) | 2014-08-29 10:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册