【问题标题】:How to use Enum to get the number of records based on the selected type?如何使用 Enum 根据所选类型获取记录数?
【发布时间】:2014-01-05 02:39:24
【问题描述】:

我正在使用 Linq-To-Entities,我正在尝试使用 Enum 根据状态检索项目的数量(计数)。例如,项目的状态可以是活动的、非活动的或待定的。我在业务逻辑层中所做的如下:

public enum ItemStatus   
    {
        Active = 1,
        Inactive = 2,
        Pending = 3
    }

public int getActiveItemsCount()
    {
        using (ItemsDBEntities context = new ItemsDBEntities())
        {
            return context.Items.Count();
        }
    }

这是我的数据库架构:

Items Table: ID, Name, StatusID
Status Table: ID, Status

如您所见,Items 和 Status 表之间存在关系。

我想要的是修改第二种方法,使项目的数量基于项目的状态。 能否请您告诉我如何创建一个类似于第二种的方法来根据 Enum 列出的状态获取项目数?

【问题讨论】:

    标签: c# asp.net entity-framework-4 linq-to-entities


    【解决方案1】:

    假设 StatusID 与您的 Enum 匹配,然后在 EF 4 上像这样(不支持原生 Enum):

    public int getActiveItemsCount(ItemStatus status)
    {
        using (ItemsDBEntities context = new ItemsDBEntities())
        {
            var enumvalue=(int)status;
            return context.Items.Where(item => item.StatusID == enumvalue).Count();
        }
    }
    

    【讨论】:

    • +1 我猜 StatusID 只是表 Status 的一个 ID(其中 Status 是 ItemStatus 枚举)但无论如何概念都很清楚!
    • @Adriano 是枚举在数据库中存储为整数
    • @Selman22 是的,我的意思是:也许 StatusID 不是枚举。它是项目的 ID(状态类型)。该项目具有属性状态,该属性是我们的枚举(转换为 int 并进行比较)。
    • @Adriano 是的,在这种情况下你是对的。但是OP可以通过将状态变量直接存储在项目表中来做到这一点。他不需要另一个表。当创建一个新的记录枚举值时自动转换整数,当获得状态时我们需要做的就是将它转换为ItemStatus 枚举类型
    • @James World,感谢您的帮助。由于我是 Linq 的新用户,您能告诉我如何在我的 UI 中使用此方法吗?我尝试使用它如下:Label8.Text = item.getActiveItemsCount(1);,但我在方法名称下得到了一条红线。
    猜你喜欢
    • 2012-05-16
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2016-10-02
    相关资源
    最近更新 更多