如何从两种方法在存储库中制作一种方法
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();
我有这两种方法:
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();