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

时间:2009-09-23 12:46:31

标签: c# linq-to-sql enums

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

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

enum SomeEnum
{
  First
  Second
}

然后在我的方法

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...
   }
}

我能做到这一点

SomeEnum.First.Equals(item.SomeNullableInteger)

或者我可以将枚举名称存储在数据库中,然后我就可以执行此操作

Enum.GetName(SomeEnum, SomeEnum.First) == item.SomeNullableName

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

实际上这是C# int to enum conversion

的副本

5 个答案:

答案 0 :(得分:12)

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

item.SomeNullableInteger == (Int32)SomeEnum.First

<强>更新

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

  1. 在设计器中打开DBML文件。
  2. 选择实体的枚举类型属性。
  3. 打开属性窗口。
  4. 将所选属性的字段TypeSystem.Int32更改为global::SomeNamespace.SomeEnum。也许它会在没有global限定符的情况下起作用,但我不确定。
  5. 现在,如果重新生成代码,则属性将是枚举类型而不是整数。如果您具有可空属性,则必须使用可为空的枚举类型。

答案 1 :(得分:3)

根据官方文档,您可以将枚举转换为int进行比较。

if (item.SomeNullableInteger == (int)SomeEnum.First)

http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

为了清晰代码,将枚举声明为

可能会有所帮助
enum SomeEnum
{
   First = 1;
   Second = 2;
}

答案 2 :(得分:2)

将枚举转换为int应该可以解决问题。

答案 3 :(得分:1)

您可以将Enum转换为int

if (item.SomeNullableInteger == (int)SomeEnum.First)
{
     // Do something...
}

答案 4 :(得分:1)

拥有

item.SomeNullableInteger == SomeEnum.First

工作:

  • 请注意First = 0&amp;秒= 1(在枚举声明之后)
  • SomeNullableInteger的类型为int
  • 当然,SomeNullableInteger = 0对你来说意味着第一个&amp; SomeNullableInteger = 1表示秒。