我使用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
有更好的方法吗?枚举只有两个项目,它们非常固定......可能有三分之一或四分之一,但可能永远不会超过这个。所以整张桌子看起来有点矫枉过正。
的副本答案 0 :(得分:12)
这应该按预期工作 - 只需转换为基类型。
item.SomeNullableInteger == (Int32)SomeEnum.First
<强>更新强>
最好和最干净的解决方案可能是更新您的DBML文件。
Type
从System.Int32
更改为global::SomeNamespace.SomeEnum
。也许它会在没有global
限定符的情况下起作用,但我不确定。现在,如果重新生成代码,则属性将是枚举类型而不是整数。如果您具有可空属性,则必须使用可为空的枚举类型。
答案 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
工作: