【问题标题】:Linq to Entities Groupby Dayname Cumulative Average of Each DaysLinq to Entities Groupby Dayname 每天的累计平均值
【发布时间】:2016-04-01 20:32:48
【问题描述】:

我有每日购物金额的数据库记录。 示例记录如下:

14.12.2015 11:00 --- 750,00

14.12.2015 14:35 --- 295,00

.....2015 年 12 月 14 日有成千上万个

15.12.2015 17:45 --- 650,00

15.12.2015 18:46 --- 395,00

....有成千上万的 15.12 和接下来的日子,直到

24.12.2015 12:38 --- 675,00 ...

这意味着我有 12 月 14 日至 24 日 11 天的记录。我想按日期对记录进行分组。所以我使用 Linq to Entities 命令并得到了我想要的结果。

     var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
.Groupby(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
.Select(o=> new ShowShoppingDailyVM{
    Day = o.Key,
    Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),//Total Turnover
    Avg= o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (What??) //Avg turnover
    Count = o.Count()
    }).ToListAsync();

这给了我

1,2,3,4,5,6,7 为天,

1200、1450、960...作为计数

12.500, 17.650, 18.950... 作为营业额

在这 11 天里,我有 2 个星期一、2 个星期二、2 个星期三和 2 个星期四(1 个星期五,1 个星期六,1 个星期日)。 我需要一些能给我周一平均营业额的东西。当我使用平均方法时,它将星期一营业额除以星期一计数(实际上是 CartAverage)。 但我实际上需要获得星期一营业额/星期一计数(2 个星期一而不是 1200 笔交易)

如何获取每日累计金额?

【问题讨论】:

    标签: c# linq date asp.net-mvc-5 linq-to-entities


    【解决方案1】:

    也许是这样的?

    var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
        .GroupBy(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
        .Select(o=> new ShowShoppingDailyVM
                      {
                          Day = o.Key,
                          Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),
                          Avg = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount)
                                   /o.Select(d => d.ShoppindDate).Distinct().Count()
                          Count = o.Count()
                      })
        .ToListAsync();
    

    【讨论】:

    • Distinct().Count() 也返回与 o.Count() 相同的结果。因为分组日期已经意味着不同的日期。完全一样。
    • 当然。 o.Count() = 1200,因为 o 组日期为 14.12.2015,当天有 1200 条记录。 Distinct().Count() = 1200,因为 14.12.2015 有 1200 条记录。它们是相同的东西。
    • 我想,我需要一些东西来将工作日分组或按周分组。我需要将周一到周一的总营业额除以计数。我在那个名单上有多少个星期一。我有 2 个星期一。所以我需要除以 2
    • 你没有回答我的问题。您是否尝试过解决方案? o.Distinct().Count()o.Select(d => d.ShoppindDate).Distinct().Count() 不同因为 o 分组日期 14.12.2015 您还没有按日期分组,而是按工作日分组。
    • 我说“当然” :) 这是我在问这个问题之前尝试过的第一件事。
    【解决方案2】:

    我想我已经解决了。我再次按周对“分组日”进行分组,并将总营业额除以天数周数。

    下面是工作代码:

         var dailyList = await db.ShoppingData.Where(c=>StoreId == id)
        .Groupby(c=> SqlFunctions.DatePart("dw",c.ShoppindDate))
        .Select(o=> new ShowShoppingDailyVM{
            Day = o.Key,
            Turnover = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount),//Total Turnover
            //Avg= o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (What??) //Avg turnover
           Avg = o.DefaultIfEmpty().Sum(a=>a.InvoiceAmount) / (decimal) o.GroupBy(a=>
           SqlFunctions.DatePart("week",c.ShoppindDate)).Count(),
            Count = o.Count()
            }).ToListAsync();
    

    这正是我所需要的。按天分组,然后在分组日期内按周分组。 14.12.2015s 和 21.12.2015s 给了我一天的星期一和周数的 2。 (一年中的第 51 周和第 52 周)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 2021-11-08
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多