c# - 使用 LINQ 在 LIST 中的最大和最小日期之间添加缺失日期列表

标签 c# asp.net linq datetime range

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

我定义了这样一个类:

   public class GroupedItem
    {
        public DateTime _Date { get; set; }
        public int Sales { get; set; }
    }

现在列表是这样填充的:

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

我得到的输出如下:

11th December 6 sales
13th December 8 sales
18th December 12 sales
19th December 25 sales

这很好,但我想添加第一个日期和最后一个日期之间缺少的日期,这样我就可以得到这样的输出:

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

如何使用 LINQ 实现此目的?

最佳答案

This Post有一种方法可以根据范围生成日期列表。我认为我们必须将日期列表合并到您的 groupedquery,因为在我看来您的查询结果尚未包含销售额为 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();

更正为包括今天和选择后的排序。

关于c# - 使用 LINQ 在 LIST 中的最大和最小日期之间添加缺失日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286399/

相关文章:

c# - VS2010 - 添加新项目不会继承现有的构建配置

C# HttpClient : Why MediaTypeWithQualityHeaderValue?

C# 编译器看到的是 Fluent 语法还是查询表达式?

c# - 使用 LINQ 构建 Dictionary 轻松访问已安装程序的注册表项

c# - 如何使用反射获取私有(private)字段的值?

c# - 如何将 .Net Framework 从 3.5 版更改为 4.0 版

javascript - 单击 .NET Core 中的单选按钮时,表单未提交

c# - 在 Linq 中比较和分配元素

c# - 在 C# 中计算乘法的高位

c# - 使用 ObjectDataSource 是一个好的做法吗?