位(抱歉)对如何在实体框架中使用位运算符感到困惑。
最近的一项要求是,我们必须将一个枚举从一系列顺序整数更改为按位枚举。所以:
[Flags]
public enum AdminLevel
{
None = 0,
Basic = 1,
Partial = 2,
Full = 4
} 我们最初将其存储为数据库中的int列。当然,它仍然是一个int,但是我很难理解如何基于多个可能的枚举值来执行选择。例如,这段代码:
public string GetAdminEmails(AdminLevel adminlevel)
{
using (IRepository r = Rep.Renew())
{
string[] to = r.GetUsers().Where(u => u.AdminLevel >= (int)adminlevel).Select(u => u.Email).ToArray();
return string.Join(",", to);
}
}将返回所有的管理级别,包括和高于一个提供。如果我想要一个以上的管理级别,我现在必须这样称呼它:
GetAdminEmails(AdminLevel.Partial | AdminLevel.Full);但是很明显,我不能把它转换成int,并且使用比任何更大的。是否有一种比一系列流控制语句更清晰的处理此更改的方法?
发布于 2016-01-06 16:56:33
您可以使用HasFlag方法:
AdminLevel myFlags = AdminLevel.Partial | AdminLevel.Full;
string s = GetAdminEmails(myFlags);
public string GetAdminEmails(AdminLevel myFlags)
{
using (IRepository r = Rep.Renew())
{
string[] to = r.GetUsers().Where(u => u.AdminLevel.HasFlag(myFlags))
.Select(u => u.Email).ToArray();
return string.Join(",", to);
}
}可以将数据库中的int列定义为模型中的枚举:
public enum MyEnum : int { First = 0, Second = 1}
public partial class MyModel
{
public MyEnum Type {get; set;}
}在整个应用程序中,您只需使用MyEnum,而EF将在后台使用int。
https://stackoverflow.com/questions/34638128
复制相似问题