-1

我有一个数据库表,其中包含基于日期的数据

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.....

请帮忙。

4

2 回答 2

1

如果您有一个Dates包含所有日期的表,那么您可以将其用作您的源,然后针对您的分组事务查询进行左连接。这在 SQL 中比在 LINQ 中更容易做到,因此存储过程可能是代替 LINQ 查询的方式。

但是,如果您想在代码中完成所有操作,看起来您已经拥有除“零”天之外的分组数据,因此将其放入代码中很容易 - 定义 20 个键值对的集合(又名Dictionary) 代表 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;
}
于 2013-04-09T22:09:20.087 回答
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 
                       }
            );
于 2013-04-09T22:06:31.167 回答