C# C Linq查询以获取日期范围的连续数据,尽管数据在数据库中不可用

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

我有一个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/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我不知道这与问题或答案有什么关系。请提出一个新问题,并说明您需要的详细信息。