将枚举与DB中的整数值返回进行比较的最简单方法是什么

Mic*_*cki 5 c# enums linq-to-sql

我正在使用LINQ 2 SQL从表中提取一些数据...其中一个数据是表示我的应用程序代码中的enumation的值.

在LINQ对象中返回的数据与应用程序代码中的枚举之间进行比较的最简单方法是什么.所以举个例子

enum SomeEnum
{
  First
  Second
}
Run Code Online (Sandbox Code Playgroud)

然后在我的方法

Table<LinqObject> objects = dc.GetTable<LinqObject>();

foreach (var item in objects)
{
   // What's the simplest way to do this comparison???
   if (item.SomeNullableInteger == SomeEnum.First) // Note I realise this doesn't work!!!
   {
      // Do something...
   }
}
Run Code Online (Sandbox Code Playgroud)

我能做到这一点

SomeEnum.First.Equals(item.SomeNullableInteger)
Run Code Online (Sandbox Code Playgroud)

或者我可以将枚举名称存储在数据库中,然后我就可以这样做了

Enum.GetName(SomeEnum, SomeEnum.First) == item.SomeNullableName
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?枚举只有两个项目,它们非常固定......可能有三分之一或四分之一但可能永远不会超过这个.所以整张桌子似乎有点矫枉过正.

实际上这是枚举转换C#int的副本

Dan*_*ner 13

这应该按预期工作 - 只需转换为基类型.

item.SomeNullableInteger == (Int32)SomeEnum.First
Run Code Online (Sandbox Code Playgroud)

UPDATE

最好和最干净的解决方案可能是更新您的DBML文件.

  1. 在设计器中打开DBML文件.
  2. 选择实体的枚举类型属性.
  3. 打开属性窗口.
  4. Type将所选属性的字段更改为System.Int32类似的字段global::SomeNamespace.SomeEnum.也许它会在没有global限定符的情况下发挥作用,但我不确定.

现在,如果重新生成代码,则属性将是枚举类型而不是整数.如果您具有可空属性,则必须使用可为空的枚举类型.