【发布时间】:2018-06-05 08:07:07
【问题描述】:
考虑我们有这个表,你可以看到有一个字符串字段我们保持文章的状态
ArticleState 可以是 New、Draft 或 Published
USE [test]
GO
CREATE TABLE [dbo].[Article](
[id] [int] NOT NULL PRIMARY KEY CLUSTERED,
[ArticleState] [nvarchar](100) NOT NULL,
[Title] [nvarchar](255) NOT NULL,
[Content] [nvarchar](max) NOT NULL
)
GO
INSERT INTO Article VALUES (1,'New','title1','this is a test');
INSERT INTO Article VALUES (2,'Draft','title2','this is a test');
INSERT INTO Article VALUES (3,'New','title3','this is a test');
INSERT INTO Article VALUES (4,'Published','title4','this is a test');
GO
我们有这个枚举
public enum ArticleStateEnum
{
[EnumDescription("Draft Articles")]
Draft = 10,
[EnumDescription("New Articles")]
New = 20,
[EnumDescription("Published Articles ")]
Published = 30,
}
我们如何根据 ArticleState 选择文章? 我的意思是我可以写什么而不是???????????????????????????????
// GET: Articles
public ActionResult Index()
{
var result= GetArticlesByState(ArticleStateEnum.Draft);
return View(result);
}
public void GetArticlesByState(ArticleStateEnum nse)
{
var articleList = db.Articles.Where(x => x.ArticleState == ??????????????????????????????);
}
【问题讨论】:
-
为什么你没有将枚举作为 int 保存在数据库中?您可以只保存 10、20 或 30,然后使用
var articleList = db.Articles.Where(x => x.ArticleState == ArticleStateEnum.New); -
顺便说一句,将状态作为
INT存储在数据库中更有意义,因为这就是枚举值。顺便说一句,如果您要将它们存储为字符串,则根据您的值,您应该使用VARCHAR而不是NVARCHAR因为没有 unicode 值 - 您只需占用两倍的字节数通过将它们存储为 unicode.. -
@Martin 别人设计的数据库,我要根据已有的数据库和项目编写代码
标签: c# asp.net-mvc linq enums