我正在使用 LINQ 2 SQL 从表中提取一些数据...其中一条数据是表示我的应用程序代码中的枚举的值。
比较 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 到 enum 的转换 https://stackoverflow.com/questions/502905/c-int-to-enum-conversion
这应该按预期工作 - 只需转换为基本类型。
item.SomeNullableInteger == (Int32)SomeEnum.First
UPDATE
最好、最干净的解决方案可能是更新您的 DBML 文件。
- 在设计器中打开 DBML 文件。
- 选择实体的枚举类型属性。
- 打开属性窗口。
- 更改字段
Type
所选属性的System.Int32
类似的东西global::SomeNamespace.SomeEnum
。也许无需global
预选赛,但我不确定。
现在,如果重新生成代码,该属性将是枚举类型而不是整数。如果您有可为空的属性,那么您当然必须使用可为空的枚举类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)