C# Linq到实体Groupby Dayname每天的累积平均值
我有每日购物金额的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命令,得到了我想要的结果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命令,
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日,你没有按日期分组,而是按周日分组。我说“当然”:)这是我在问这个问题之前做的第一件事。