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