如何从两种方法在存储库中制作一种方法

How to make from two methods one method in a repository

我有这两种方法:

  private IQueryable<Alert> GetAlert(int organisationId, bool includeDone = false)
        {
            var query = _patientDbContext.Alerts
                .Where(i => i.OrganisationId == organisationId);

            if (!includeDone)
            {
                query = query.Where(i => !i.IsDone);
            }

            query = query.OrderBy(i => i.Deadline);

            return query;
        }


        private IQueryable<Alert> GetAlerts(int organisationId, DateTime? beginDate, DateTime? endDate ,  bool includeDone = false)
        {
            var query = _patientDbContext.Alerts
                .Where(i => i.OrganisationId == organisationId && (beginDate == null ||  i.CreatedAt <= endDate) && (endDate == null || i.CreatedAt >= beginDate));               

            if (!includeDone)
            {
                query = query.Where(i => !i.IsDone);
            }

            query = query.OrderBy(i => i.Deadline);

            return query;
        }

所以唯一的区别是一种方法将日期时间作为参数传递以进行过滤。

但是有没有可能做一个这样的方法?

谢谢

这就是我现在的使用方式:


  public async Task<Alert> GetAlertForOrganisation(Guid alertId, int organisationId)
        {
            return await GetAlert(organisationId)
                .Where(i => i.AlertId == alertId)
                .SingleOrDefaultAsync();
        }

        public async Task<List<Alert>> GetAllAlertsForOrganisation(int organisationId, DateTime? beginDate, DateTime? endDate)
        {
            return await GetAlerts(organisationId, beginDate, endDate)
                .ToListAsync();
        }


您可以将整个过滤器作为表达式参数发送:

public IQueryable<Alert> GetAlerts(Expression<Func<Alert, bool>> filter, bool includeDone = false)
{
    var query = _patientDbContext.Alerts
        .Where(filter);

    if (!includeDone)
    {
        query = query.Where(i => !i.IsDone);
    }

    query = query.OrderBy(i => i.Deadline);

    return query;
}

并按如下方式使用:

var query1 = repository.GetAlerts(i => i.OrganisationId == organisationId)
    .ToList();
var query2 = repository.GetAlerts(i =>
        i.OrganisationId == organisationId && (beginDate == null || i.CreatedAt <= endDate) &&
        (endDate == null || i.CreatedAt >= beginDate))
    .ToList();