嘿伙计们,我不确定我想做的是否正确, 我在我们的网络中有不同的状态,我为它创建了一个 ENUM 类:
public enum AllMachinesStatus
{
STOP,
START,
LINKDOWN,
ERROR,
LINK_UP,
IDLE,
}
在数据库I中有一个绑定这些字段的服务,它们都是int,显示每个状态中的机器编号应该会不时变化,现在我想用linq获取这些数据并绑定我的类,你认为这是一个正确的方法吗?或者我应该创建一个带有构造函数的普通类,每当我调用类时我都可以拥有数据?
var rslt=(from s in db.Machines
select new AllMachinesStatus{
//here i dont have access to the properties of enum class to bind them with Count()
}
> 如果s
在具有有效值的整数中AllMachinesStatus
,请尝试:
from s in db.Machines select (AllMachinesStatus)s
基本上,它正在将int
转换为AllMachinesStatus
枚举
您的问题是此处enum
使用不当。
enum
没有构造函数,它是一个具有隐式值类型的强类型,但它主要适用于信号和标记。
在此方法中,您将对s
进行评估,并将相关int
值s
或字段\属性s
转换为AllMachinesStatus
,或者使用s
或字段\属性Enum.Parse
s
(即s.Status
)。
请注意,AllMachinesStatus
enum
具有隐式int
值。
public enum AllMachinesStatus
{
STOP, // 0
START, // 1
LINKDOWN, // 2
ERROR, // 3
LINK_UP, // 4
IDLE, // 5
}
带s.Status
的Enum.Parse
示例
// note that 'false' is being passed for case insensitive behavior in the method
var rslt=(from s in db.Machines
select (AllMachinesStatus)Enum.Parse(typeof(AllMachinesStatus), s.Status, false));
<小时 />或者,
如果s
有一个与int
值相关的字段(例如,我将调用BitFlag
),您可以执行以下操作:
将int
转换为AllMachinesStatus
的示例
var rslt=(from s in db.Machines
select (AllMachinesStatus)s.BitFlag);
文档参考资料:
- MSDN System.Enum
- MSDN Enum.Parse
>编辑1:包括使用Enum.GetName
Enum.Parse
的示例和更正情绪
编辑2:
更新s
以使用s.Status
存在引用的问题注释。