加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – 如何检查字节值是否与指定标志枚举中的任何标志匹配?

发布时间:2020-12-15 22:35:09 所属栏目:百科 来源:网络整理
导读:在C#中,我将标记枚举值作为字节存储在数据库中.例如,对于以下Flags枚举: [Flags]public enum Options{ None = 0,First = 1,Second = 2,Third = 4} 如果我想记录’First’和’Second’,我将其保存为数据库中记录的’options’字段中的’3’字节. 因此,在使用
在C#中,我将标记枚举值作为字节存储在数据库中.例如,对于以下Flags枚举:

[Flags]
public enum Options
{
    None = 0,First = 1,Second = 2,Third = 4
}

如果我想记录’First’和’Second’,我将其保存为数据库中记录的’options’字段中的’3’字节.

因此,在使用LINQ时,如何检查数据库中的值是否与作为“选项”枚举传递的参数中的“任何”选项匹配,类似于此伪代码:

public static Something(Options optionsToMatch)
    {
       db.MyEntity.Get(a => a.options contains any of the options in optionsToMatch);

解决方法

这里的代码通过遍历枚举来完成你想要的东西(我从 here那里得到了答案).

static void Main()
    {
        //stand-in for my database
        var options = new byte[] { 1,2,3,4,1,5 };

        var input = (Options)5;

        //input broken down into a list of individual flags
        var optional = GetFlags(input).ToList();
        //get just the options that match either of the flags (but not the combo flags,see below)
        var foundOptions = options.Where(x => optional.Contains((Options)x)).ToList();
        //foundOptions will have 3 options: 1,1
    }

    static IEnumerable<Enum> GetFlags(Enum input)
    {
        foreach (Enum value in Enum.GetValues(input.GetType()))
            if (input.HasFlag(value))
                yield return value;
    }

编辑

如果您还想在此示例中找到5(选项的组合),只需添加一个额外的或条件,如下所示:

var foundOptions = options.Where(x => optional.Contains((Options)x) || input == (Options)x).ToList();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读