выбрать базу по параметру enum без регистра? - PullRequest
0 голосов
/ 05 июня 2018

рассмотрим, у нас есть эта таблица, так как вы можете видеть, что есть строковое поле, в котором мы сохраняем состояние статьи

ArticleState может быть новым, черновым или опубликованным

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 ==  ??????????????????????????????);
    }

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если вы не можете изменить представление базы данных, вы можете просто вызвать get строковое значение с помощью ToString:

public void GetArticlesByState(ArticleStateEnum nse)
{
    string stateText = nse.ToString();
    var articleList = db.Articles.Where(x => x.ArticleState == stateText);
    ...
}
0 голосов
/ 05 июня 2018

Я бы использовал Enum.GetName(typeof(ArticleStateEnum), nse)

Либо как:

public void GetArticlesByState(ArticleStateEnum nse)
{
    var articleList = db.Articles
         .Where(x => x.ArticleState == Enum.GetName(typeof(ArticleStateEnum), nse));
}

или как:

public void GetArticlesByState(ArticleStateEnum nse)
{
    string state = Enum.GetName(typeof(ArticleStateEnum), nse);
    var articleList = db.Articles.Where(x => x.ArticleState == state);
}

Обратите внимание, что это решение будетработать даже со значением int (при условии, что значение совпадает со значением перечисления):

public void GetArticlesByState(int nse)
{
    string state = Enum.GetName(typeof(ArticleStateEnum), nse);
    var articleList = db.Articles.Where(x => x.ArticleState == state);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...