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 实现这一目标?
这篇文章有一种方法可以根据范围生成日期列表。我认为我们必须将日期列表合并到您的分组查询中,因为在我看来,您的查询结果尚未包含销售量为 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)
更正为包括今天和选择后的订购日期。
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |