使用 LINQ 将缺失的日期添加到 LIST 中最大和最小日期之间的列表

Use*_*987 1 c# linq asp.net datetime range

我正在尝试用没有销售的缺失日期填充我的列表......

我定义了一个这样的类:

   public class GroupedItem
    {
        public DateTime _Date { get; set; }
        public int Sales { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

现在列表填充如下:

var LineGraph = _groupedItems
                      .GroupBy(l => l._Date.Date)
                      .Select(cl => new GroupedItem
                      {
                           _Date = cl.Key,
                           Sales = cl.Sum(c=>c.Sales)
                      })
                      .OrderBy(x => x._Date)
                      .Where(t => t._Date <= DateTime.Now &&
                      t._Date >= DateTime.Now.Subtract(TimeSpan.FromDays(date_range)))
                      .ToList();
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

11th December 6 sales
13th December 8 sales
18th December 12 sales
19th December 25 sales
Run Code Online (Sandbox Code Playgroud)

这相当不错,但我想添加第一个日期和最后一个日期之间缺少的日期,以便我可以得到如下输出:

11th December 6 sales
12th December 0 sales
13th December 8 sales
14th December 0 sales 
15th December 0 sales
16th December 0 sales
17th December 0 sales
18th December 12 sales
21st December 25 sales
Run Code Online (Sandbox Code Playgroud)

如何使用 LINQ 实现这一目标?

EJC*_*EJC 5

这篇文章有一种方法可以根据范围生成日期列表。我认为我们必须将日期列表合并到您的分组查询中,因为在我看来,您的查询结果尚未包含销售量为 0 的日期的行。

var LineGraph = _groupedItems.Union(Enumerable.Range(1, date_range)
          .Select(offset => new GroupedItem { _Date = DateTime.Now.AddDays(-(date_range)).AddDays(offset), Sales = 0} ))
                      .GroupBy(l => l._Date.Date)
                      .Select(cl => new GroupedItem
                      {
                           _Date = cl.Key,
                           Sales = cl.Sum(c=>c.Sales)
                      })
                      .Where(t => t._Date <= DateTime.Now &&
                      t._Date >= DateTime.Now.Subtract(TimeSpan.FromDays(date_range)))
                      .OrderBy(x => x._Date)
                      .ToList();
Run Code Online (Sandbox Code Playgroud)

更正为包括今天和选择后的订购日期。