c# - 如何对 Enum 执行 LINQ 查询?

标签 c# .net linq data-binding enums

下面是我的枚举器列表:

public enum StatusEnum
{
    Open = 1,
    Rejected = 2,
    Accepted = 3,
    Started = 4,
    Completed = 5,
    Cancelled = 6,
    Assigned = 7
}

我需要将它绑定(bind)到 Combobox,但是,只显示一些特定的状态而忽略其余的。

这是我目前所拥有的:

public static List<Activity.StatusEnum> StatusList()
{
        IEnumerable<Activity.StatusEnum> query = Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>()
                        .Where(x => x == Activity.StatusEnum.Open
                            || x == Activity.StatusEnum.Rejected
                            || x == Activity.StatusEnum.Accepted
                            || x == Activity.StatusEnum.Started);
        return query.ToList();
}

但是,我觉得代码有点乱,不是将过滤后的 Enum 列表绑定(bind)到 Combobox 的正确方法。 任何人都可以建议一种更可靠的方法吗?

更新

我可能需要更改选择顺序。所以我需要一个通用的解决方案,它不仅可以获得前 X 个状态。

最佳答案

return Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>().Where((n, x) => x < 4);

如果您希望能够更改项目列表,只需将它们添加到 List<Activity.StatusEnum> 中即可。并使用 Contains :

var listValid = new List<Activity.StatusEnum>() { Activity.StatusEnum.Open, Activity.StatusEnum.Rejected, Activity.StatusEnum.Accepted, Activity.StatusEnum.Started };
return Enum.GetValues(typeof(Activity.StatusEnum)).Cast<Activity.StatusEnum>().Where(n => listValid.Contains(n));

关于c# - 如何对 Enum 执行 LINQ 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091917/

相关文章:

c# - 搜索日期范围内的票证字段

c# - "A cycle was detected in the set of changes"尝试向数据库添加循环链表时

c# - 如何递归查询 Winform 的所有子控件?

c# - 在相等运算符实现中引用相等运算符

c# - 关于yield return statement的问题

c# - 超链接中的“System.UriFormatException”

.net - 未知软件异常 0xe0434352

c# - 在 WPF 中对列表框进行排序

c# - 如何自定义CultureInfo的默认日历?

c# - 基于书籍构建 LINQ 查询