首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于位Enum从带有参数的实体框架返回值

如何基于位Enum从带有参数的实体框架返回值
EN

Stack Overflow用户
提问于 2016-01-06 16:37:49
回答 1查看 752关注 0票数 3

位(抱歉)对如何在实体框架中使用位运算符感到困惑。

最近的一项要求是,我们必须将一个枚举从一系列顺序整数更改为按位枚举。所以:

代码语言:javascript
复制
[Flags]
public enum AdminLevel
{
    None = 0,
    Basic = 1,
    Partial = 2,
    Full = 4
} 

我们最初将其存储为数据库中的int列。当然,它仍然是一个int,但是我很难理解如何基于多个可能的枚举值来执行选择。例如,这段代码:

代码语言:javascript
复制
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);
    }
}

将返回所有的管理级别,包括和高于一个提供。如果我想要一个以上的管理级别,我现在必须这样称呼它:

代码语言:javascript
复制
GetAdminEmails(AdminLevel.Partial | AdminLevel.Full);

但是很明显,我不能把它转换成int,并且使用比任何更大的。是否有一种比一系列流控制语句更清晰的处理此更改的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 16:56:33

您可以使用HasFlag方法:

代码语言:javascript
复制
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列定义为模型中的枚举:

代码语言:javascript
复制
public enum MyEnum : int { First = 0, Second = 1}

public partial class MyModel
{
   public MyEnum Type {get; set;}
}

在整个应用程序中,您只需使用MyEnum,而EF将在后台使用int

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34638128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档