我认为如果枚举不包含一天的数据,则不能返回该天的值。我能想到的最好方法是为每天创建一个值为零的order对象列表,并用查询结果创建一个联合。这就是我想到的。但是,我认为循环遍历每个组,检查是否有一天被“跳过”,并为被“跳过”的每一天返回零比在内存中创建自己的枚举更简单(除非您想要一个填充了“缺少间隙”的枚举)。请注意,我基本上假设,对于每个组,您希望对一天的所有值求和。
List<Order> zeroList = new List<Order>();
while (startDate <= endDate)
{
zeroList.Add(new Order { OrderDateTime = startDate, OrderPrice = 0 });
startDate = startDate.AddDays(1)
}
var comboList = zeroList.Union(dc.Orders.Where(b => b.OrderDateTime > Convert.ToDateTime(startDate.Date + startTS) && b.OrderDateTime <= Convert.ToDateTime(endDate.Date + endTS))
var groupedTotalSales = comboList.GroupBy(b => b.OrderDateTime.Date)
.Select(b => new { StartDate = Convert.ToDateTime(b.Key + startTS), EndDate = Convert.ToDateTime(b.Key + endTS), Sum = b.Sum(x => x.OrderPrice });
foreach (totalSale in groupedTotalSales)
Response.Write("From Date: " + totalSale.StartDate + " - To Date: " + totalSale.EndDate + ". Sales: " + String.Format("{0:0.00}", (decimal)totalSale.Sum) + "<br/>");