gpt4 book ai didi

c# - 如何为三个几乎相同的方法创建单独的方法

转载 作者:行者123 更新时间:2023-12-02 17:40:41 25 4
gpt4 key购买 nike

我有一个 .net core 应用程序。我有这个 fitler 函数:

private 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;
}

我有三个使用过滤器函数的函数,如下所示:

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

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

public async Task<int> GetAllAlertsForOrganisationCount(int organisationId, DateTime? beginDate, DateTime? endDate)
{
return await GetAlerts(i => i.OrganisationId == organisationId && (endDate == null || i.CreatedAt <= endDate) &&
(beginDate == null || i.CreatedAt >= beginDate)).CountAsync();
}

但它们几乎是相同的。那么可以写得更短吗?

最佳答案

您可以删除 Guid participantId参数来自GetAlertsForParticipantOfOrganisation ,因为该方法未使用此参数。然后你可以删除它,因为它与 GetAllAlertsForOrganisation 相同。

考虑到上述内容,您可以创建另一个返回 IQueryable<Alert> 的方法。并通过您的 3 种方法重复进行过滤:

public IQueryable<Alert> GetAllAlerts(int organisationId, DateTime? beginDate, DateTime? endDate)
{
return GetAlerts(i => i.OrganisationId == organisationId &&
(endDate == null || i.CreatedAt <= endDate) &&
(beginDate == null || i.CreatedAt >= beginDate));
}

然后您可以在其他方法中使用相同的逻辑:

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

public async Task<int> GetAllAlertsForOrganisationCount(int organisationId, DateTime? beginDate, DateTime? endDate)
{
return await GetAllAlerts(organisationId, beginDate, endDate).CountAsync();
}

关于c# - 如何为三个几乎相同的方法创建单独的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com