【问题标题】:How to get total annual sales如何获得年总销售额
【发布时间】:2022-10-04 15:57:06
【问题描述】:

在我的 ASP.NET Core 6 Web API 中,我使用下面的代码来计算年总销售额(来自 Transactions):

private async Task<decimal> GetAllTotalMonthlyTransactions()
{
    string transactionMonth = DateTime.Now.ToString("MM");
    decimal totalMonthlyTransactions = 0;

    var sales = await _dbContext.Sales.ToListAsync();

    foreach (var item in sales)
    {
        var salesDate = item.CreatedAt.ToString();
        var salesMonth = salesDate.Substring(3, 2);

        if (transactionMonth == salesMonth)
        {
            totalMonthlyTransactions += item.Amount;
        }
    }

    return totalMonthlyTransactions;
}

如何重新编写上面的代码以获得TotalAnnualSales(事务)?

【问题讨论】:

  • 你觉得if (transactionMonth == salesMonth) 在做什么
  • 您希望当前一年的年销售额是哪一年?
  • saless !== sales
  • 使用调试器单步执行代码并检查您的值。如果不需要,不要使用子字符串。

标签: c# asp.net-core


【解决方案1】:

不要将日期时间转换为字符串,而是尝试将它们作为提示进行访问。您可以分别使用 .Month 或 .Year 执行此操作

【讨论】:

  • 作为说明,这两个都返回 int。否则,如果您只是想将其更改为足以工作,请将“MM”替换为“yyyy”,并将 salesDate.Substring(3, 2) 替换为 salesDate.Substring(6, 4)
【解决方案2】:

您可以尝试根据指定月份计算fromto 日期范围,然后使用这些fromto 日期范围查询/过滤销售数据,如下所示。

var date1 = DateTime.Now;
var days = DateTime.DaysInMonth(date1.Year, date1.Month);

var from = new DateTime(date1.Year, date1.Month, 1, 0, 0, 0);
var to = new DateTime(date1.Year, date1.Month, days, 23, 59, 59);          

var totalMonthlyTransactions = sales.AsEnumerable().Where(s => s.CreatedAt >= from && s.CreatedAt <= to).Select(s => s.Amount).Sum();
        

【讨论】:

    【解决方案3】:
    private async Task<decimal> GetAllTotalMonthlyTransactions()
    {
        int currentYear  = DateTime.Now.Year;
    
        return (await dbContext.Sales.Where(t=>t.CreatedAt.Year==currentYear).ToListAsync()).Sum();
    
    }
    

    【讨论】:

      【解决方案4】:

      我希望以下代码对您有用...

      private async Task<IEnumerable<object>> GetMonthlyTransactions(int year)
          {
              var starting = new DateTime(year, 1, 1).Date;
              var sales = await context.Sales.Where(f => f.SalesDate >= starting).Select(s => new
              {
                  Date = s.SalesDate.ToString("MM-yyyy"),
                  Amount = s.NetAmount
              }).ToListAsync();
              var finaldata = sales.GroupBy(s => s.Date, (d, a) => new { Date = d, Am = a }).Select(l => new
              {
                  Date = l.Date,
                  Amount = l.Am.Sum(h => h.Amount)
              });
              return finaldata;
             
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 2013-02-08
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多