如何使用 linq 绑定枚举类



嘿伙计们,我不确定我想做的是否正确, 我在我们的网络中有不同的状态,我为它创建了一个 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进行评估,并将相关ints或字段\属性s转换为AllMachinesStatus,或者使用s或字段\属性Enum.Parses(即s.Status)。


请注意,AllMachinesStatusenum具有隐式int值。

public enum AllMachinesStatus
{
STOP,         // 0
START,        // 1
LINKDOWN,     // 2
ERROR,        // 3
LINK_UP,      // 4
IDLE,         // 5
}

s.StatusEnum.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.GetNameEnum.Parse的示例和更正情绪

编辑2:

更新s以使用s.Status存在引用的问题注释。

最新更新