C# C Linq查询以获取日期范围的连续数据,尽管数据在数据库中不可用
我有一个db表,其中包含基于日期的数据C# C Linq查询以获取日期范围的连续数据,尽管数据在数据库中不可用,c#,linq,C#,Linq,我有一个db表,其中包含基于日期的数据 Date sales 09/01/2012 20 09/04/2012 40 我需要获取20天的数据,如下所示,获取当年的数据,以及所有缺失的天数,如图所示 Date Day Sales 09/01/2012 Mon 20 09/02/2012 Tue 0 09/03/2012 Wed 0 09/04/2012 Thu 40 09/05/201
Date sales
09/01/2012 20
09/04/2012 40
我需要获取20天的数据,如下所示,获取当年的数据,以及所有缺失的天数,如图所示
Date Day Sales
09/01/2012 Mon 20
09/02/2012 Tue 0
09/03/2012 Wed 0
09/04/2012 Thu 40
09/05/2012 Fri 0.....
请提供帮助。使用Enumerable.Range来获取日期范围,并进行左连接应该可以帮助您:
DateTime start = new DateTime(2012,09,01);
DateTime end = new DateTime(2012,09,05);
var query = Enumerable.Range(0,(end-start).Days+1) // range of ints
.Select(i => start.AddDays(i)) // range of dates
.GroupJoin(data,
d=>d,
d=>d.Date,
(d,g)=>new { Date = d,
Day = d.ToString("dddd"),
Sales = g.Any() ? g.Sum(i=>i.Sales) : 0
}
);
如果您有一个包含所有日期的Dates表,那么您可以将其用作源,然后对分组事务查询进行左联接。这在SQL中比在LINQ中更容易实现,因此存储过程可能是替代LINQ查询的方法
但是,如果您想在代码中完成这一切,那么看起来您已经拥有了除零天之外的分组数据,因此将其放入代码中很容易-定义一个包含20个键值对的集合,也称为表示20个日期的字典,然后将数据放入该集合中
// Very rough - double check the date logic:
var valuesByDate = new Dictionary<DateTime, int>();
for (DateTime dt = startDate; dt < startDate.AddDays(20); dt = dt.AddDays(1)) {
valuesByDate[dt] = 0;
}
foreach (var record in recordsFromDb) {
valuesByDate[record.Date] = record.Sales;
}
我需要显示的项目图标列表中有一个字符串值,请帮助我如何从数据库中获取字符串路径+图标名称的图标。Icon=g.有吗?g、 选择i=>i.ItemIcon.ToString:string.empty我不知道这与问题或答案有什么关系。请提出一个新问题,并说明您需要的详细信息。