如何用枚举法过滤布尔字段?

问题描述 投票:0回答:1

我有一个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-属性的价值。

但如何做到这一点?

谢谢你

c# .net core
1个回答
1
投票

通过下面的代码,你可以根据以下内容过滤数据。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();           
}
© www.soinside.com 2019 - 2024. All rights reserved.