SQL Server 枚举异或运算后值存入数据库,读取符合条件的值

有枚举如下:

[Flags]
    public enum Color
    {
        Red = 1,
        Green = 2,
        Blue = 4,
        White = 8
    }

定义三个枚举变量,并将值存入数据库:

Color color0=Color.Red;
Color color1=Color.Red|Color.Blue;
Color color2=Color.Red|Color.White;

将color0(1)、color1(5)、color2(9)三个值存入数据库,通过SQL语句获取颜色中包含Red的所有数据行,读取方法可通过SQL位运算查询。

SQL语句如下:

SELECT * FROM TableName WHERE ColumnName & 1=1
/*或者*/

SELECT * FROM TableName WHERE ColumnName & 1!=0 /*或者*/ SELECT * FROM TableName WHERE ColumnName | 1=ColumnName

 判断是否包含指定枚举:

| 符号,把所有二进制数据进行合并,有一个或两个1都返回1

Color color1 = Color color1=Color.Red|Color.Blue; 等于 1|4,等于5

则:

color1|Color.Red; 等于5|1,等于5

color1|Color.Bule; 等于5|4,等于5

color1|Color.Green; 等于5|2,等于7

color1|Color.White; 等于5|8,等于13

if((color1 | Color.Red)==color1)// 或者 (color1 & Color.Red)==Color.Red 或者 (color1 & Color.Red)!=0
{
    // 进入此处
    MessageBox.Show("包含Red");
}
else
{
   
}

if((color1 | Color.White)==color1)// 或者 (color1 & Color.White)==Color.White 或者 (color1 & Color.White)!=0
{
   
}
else
{
   // 进入此处
   MessageBox.Show("不包含White");
} 
// 移除一个值:
color1=color1 & (~Color.White);

 

posted @ 2017-01-12 14:47  落一叶而知秋  阅读(1700)  评论(0编辑  收藏  举报