如何在ASP.NET Core 6 Web API中获取年度销售总额?
重写代码获取年度交易销售总额
原代码存在两个可优化的问题:一是将全表数据加载到内存后再过滤计算,数据量大时性能低下;二是通过字符串截取日期判断月份,容易因日期格式差异出现错误。针对获取年度销售总额的需求,我们可以直接利用EF Core的查询能力在数据库层面完成过滤与聚合,同时规避字符串操作的风险。
基础版本(当前年度总额)
private async Task<decimal> GetTotalAnnualSales() { int currentYear = DateTime.Now.Year; return await _dbContext.Sales .Where(sale => sale.CreatedAt.Year == currentYear) .SumAsync(sale => sale.Amount); }
扩展版本(支持指定年份)
如果需要查询任意年份的销售总额,可以添加重载方法:
private async Task<decimal> GetTotalAnnualSales(int targetYear) { return await _dbContext.Sales .Where(sale => sale.CreatedAt.Year == targetYear) .SumAsync(sale => sale.Amount); }
核心改动说明
- 直接使用
DateTime.Now.Year获取当前年份的整数,避免字符串处理可能导致的格式错误 - 借助EF Core的
Where和SumAsync方法,让数据库执行过滤与求和操作,无需加载全表数据,性能大幅提升 - 代码逻辑更简洁,减少了临时变量与循环的冗余
内容的提问来源于stack exchange,提问作者Ayobamilaye
相关产品推荐
相关产品推荐

