Как фильтровать логическое поле с помощью enum? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть приложение asp. net.

И у меня есть репозиторий с методом запроса в нем. И у меня есть AlertStatusEnum, например:

public enum AlertStatusEnum
{
    /// <summary>
    /// Alerts where done is true
    /// </summary>
    Done = 1,
    /// <summary>
    /// Alerts where done is false
    /// </summary>
    NotDone,
    /// <summary>
    /// Returns complete list of Alerts either done or NotDone
    /// </summary>
    All
}

, и у меня есть такой метод запроса:

public async Task<List<Alert>> GetAllAlertsForOrganisation(int organisationId, DateTime? beginDate, DateTime? endDate, AlertStatusEnum statusEnum)
{
    return await GetAlerts(i => i.OrganisationId == organisationId 
        && (endDate == null || i.CreatedAt <= endDate) 
        && (beginDate == null || i.CreatedAt >= beginDate)
        && i.IsDone)
       .ToListAsync();           
}

и IsDone выглядит так:

   public bool IsDone { get; set; }

Итак, единственное, что я хочу, это следующее:

  • Если statusEnum -параметр равен AlertStatusEnum.Done, возвращать только оповещения с IsDone == true
  • Если statusEnum -параметр равен AlertStatusEnum.NotDone, возвращать только оповещения, которые имеют IsDone == false
  • Если statusEnum -параметр AlertStatusEnum.All, возвращать все оповещения, несмотря на значение IsDone -свойства .

А как это сделать?

Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

С помощью следующего фрагмента вы можете фильтровать данные по параметру statusEnum:

public async Task<List<Alert>> GetAllAlertsForOrganisation(int organisationId, DateTime? beginDate, DateTime? endDate, AlertStatusEnum statusEnum)
{
    var isDone = statusEnum == AlertStatusEnum.Done; 
    return await GetAlerts(i => i.OrganisationId == organisationId 
        && (endDate == null || i.CreatedAt <= endDate) 
        && (beginDate == null || i.CreatedAt >= beginDate)
        && (i.IsDone == isDone || statusEnum == AlertStatusEnum.All))
       .ToListAsync();           
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...