What's the simplest way to compare an enum to a integer value return from a DB
我正在使用Linq2SQL从表中提取一些数据…其中一个数据块是一个值,它表示应用程序代码中的枚举。
比较Linq对象中返回的数据和应用程序代码中的枚举的最简单方法是什么?例如
1 2 3 4 5 | enum SomeEnum { First Second } |
那么在我的方法中
1 2 3 4 5 6 7 8 9 10 | 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... } } |
我能做到这一点
1 | SomeEnum.First.Equals(item.SomeNullableInteger) |
或者我可以将枚举名称存储在数据库中,然后我就可以这样做了
1 | Enum.GetName(SomeEnum, SomeEnum.First) == item.SomeNullableName |
有更好的方法吗?枚举只有两个项,它们非常固定……可能有三分之一或四分之一,但可能永远不会超过这个值。所以整张桌子似乎太过分了。
实际上,这是C int到枚举转换的副本
这应该如预期的那样工作-只是强制转换为基类型。
1 | item.SomeNullableInteger == (Int32)SomeEnum.First |
更新
最好和最干净的解决方案可能是更新DBML文件。
现在,如果重新生成代码,则属性将是枚举类型,而不是整数。如果您有可以为空的属性,那么当然必须使用可以为空的枚举类型。
根据官方文档,可以将枚举强制转换为int进行比较。
1 | if (item.SomeNullableInteger == (int)SomeEnum.First) |
http://msdn.microsoft.com/en-us/library/sbbt4032.aspx
为了代码清晰,将枚举声明为
1 2 3 4 5 | enum SomeEnum { First = 1; Second = 2; } |
将枚举强制转换为int应该可以做到这一点。
拥有
1 | item.SomeNullableInteger == SomeEnum.First |
工作:
- 请注意,first=0&second=1(在该枚举声明之后)
- someNullableInteger的类型为int
- 当然,someNullableInteger=0表示第一个,someNullableInteger=1表示第二个。
你可以把
1 2 3 4 | if (item.SomeNullableInteger == (int)SomeEnum.First) { // Do something... } |