Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体Groupby Dayname每天的累积平均值_C#_Linq_Date_Asp.net Mvc 5_Linq To Entities - Fatal编程技术网

C# Linq到实体Groupby Dayname每天的累积平均值

C# Linq到实体Groupby Dayname每天的累积平均值,c#,linq,date,asp.net-mvc-5,linq-to-entities,C#,Linq,Date,Asp.net Mvc 5,Linq To Entities,我有每日购物金额的DB记录。 样本记录如下: 14.12.2015 11:00--750,00 14.12.2015 14:35---295,00 ……2015年12月14日有数千人 2015年12月15日17:45---650,00 2015年12月15日18:46---395,00 …在15.12及以后的几天内 24.12.2015 12:38---675,00 这意味着我有12月14日至24日11天的记录。我想按dayname对记录进行分组。因此,我使用LINQtoEntities命令,

我有每日购物金额的DB记录。 样本记录如下:

14.12.2015 11:00--750,00

14.12.2015 14:35---295,00

……2015年12月14日有数千人

2015年12月15日17:45---650,00

2015年12月15日18:46---395,00

…在15.12及以后的几天内

24.12.2015 12:38---675,00

这意味着我有12月14日至24日11天的记录。我想按dayname对记录进行分组。因此,我使用LINQtoEntities命令,得到了我想要的结果

     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为天

12001450960。。。作为伯爵

12.500、17.650、18.950。。。作为失误

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


我怎样才能得到每天的累积平均量呢?

可能是这样的

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();

我想我已经解决了。我将“分组日”按周再次分组,并将总周转天数除以周数

以下是工作代码:

     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();

这正是我所需要的。按天分组,然后在分组日期内按周分组。2015年12月14日和2015年12月21日分别为星期一和第二周。(51.和52.一年中的一周)

Distinct().Count()也返回与o.Count()相同的值。因为分组日期已经意味着不同的日期。当然,完全一样。o、 Count()=1200,因为o组日期为2015年12月14日,当天有1200条记录。Distinct().Count()=1200,因为2015年12月14日有1200条记录。它们都是一样的。我想,我需要一些东西来在工作日分组,或者一周一周地分组。我需要将周一的总营业额除以周一的总营业额。那个名单上有多少星期一。我有两个星期一。所以我需要除以2你没有回答我的问题。你试过这个解决办法吗
o.Distinct().Count()
不同于
o.Select(d=>d.ShoppindDate).Distinct().Count()
,因为o组的日期是2015年12月14日,你没有按日期分组,而是按周日分组。我说“当然”:)这是我在问这个问题之前做的第一件事。