将按位枚举映射到sql列值

Roh*_*ats 8 c# sql t-sql sql-server wpf

我有一个按位枚举,FlagsAttribute像这样设置 -

[FlagsAttribute]
public enum MyEnum
{
    None = 0,
    First = 1,
    Second = 2,
    Third = 4,
    Five = 8,
    Six = 16,
    Seven = 32,
    Eight = 64,
    Nine = 128
}
Run Code Online (Sandbox Code Playgroud)

现在,在C#中,我将此值存储在属性中,例如MyProperty,在保存时,我在整数列的SQL数据库中写入此属性.假设我First,Second,Five从代码中选择然后在数据库中将其保存为'11'.

我知道我可以从DB中获取值,只需要将值转换为MyEnum,它就会给我值.但是,我希望在一些存储过程中对SQL数据进行一些操作,显然我不能将它转换为Enum值.那么,有没有出路可以让我了解个人价值观.

就像在示例中如果存储了11,我可以将其作为任何方式 "1+2+8"

Roc*_*oC5 11

这可能有助于您入门:

Select 11 & 1 As 'First'
  , 11 & 2 As 'Second'
  , 11 & 4 As 'Third'
  , 11 & 8 As 'Five'
  , 11 & 16 As 'Six'
  , 11 & 32 As 'Seven'
  , 11 & 64 As 'Eight'
  , 11 & 128 As 'Nine';
Run Code Online (Sandbox Code Playgroud)

11你的储值在哪里?

这将为每个设置的值返回非零值(即Select 11 & 1 As 'First'返回1,Select 11 & 2 As 'Second'返回2,Select 11 & 4 As 'Third'返回0等等.


The*_*ing 6

您可以在SQL中执行按位操作

Select  *
From    MyTable
Where   MyEnum = (1 | 2 | 8)
Run Code Online (Sandbox Code Playgroud)

返回设置了哪些标志

Select  Case when (MyEnum & 1) = 1 Then 1 else 0 End as First,
        Case when (MyEnum & 2) = 2 Then 1 else 0 End as Second,
        Case when (MyEnum & 4) = 4 Then 1 else 0 End as Third,
        Case when (MyEnum & 8) = 8 Then 1 else 0 End as Fourth,
        Case when (MyEnum & 16) = 16 Then 1 else 0 End as Fifth
From    MyTable
Run Code Online (Sandbox Code Playgroud)