5

我有一个非常简单的查询,它根据匹配月份从表中选择项目,然后按天分组。然后将这些组用作转发器的数据源,该转发器将组元素输出为“每天”条目。

问题是不存在的日子(即没有分组)自然不会显示,所以 6 号和 8 号的东西,当 7 号什么都没有时,会直接相邻看到(想想一个日历视图)。问题是,鉴于我在下面的查询,我如何插入没有元素的组,即使那天没有条目?

IQueryable events = 
  Events
    .Where(i => i.Date.Month == date.Month)
    .GroupBy(i => i.Date.Day);

我可以在事后弄清楚这一点,但我可以考虑它来立即获得结果集吗?或者可以推荐以前尝试过的方法吗?

4

1 回答 1

2

像这样创建你的结果集:

var date = ...;
var events = Enumerable.Range(1, DateTime.DaysInMonth(date.Year, date.Month))
    .ToDictionary(
        day => new DateTime(date.Year, date.Month, day),
        day => new List<Event>());

然后像这样插入它:

var query = Events
    .Where(e => e.Date.Year == date.Year)
    .Where(e => e.Date.Month == date.Month);

foreach (var e in query)
    events[e.Date].Add(e);

如果您真的想将此服务器端作为查询的一部分,您需要 (A) 发送您感兴趣的日期列表作为查询的一部分,或者 (B) 使用 DBMS 特定的功能构建您对服务器端感兴趣的日期集。

具体到(B)和SQL,有这样的东西:在MySQL中获取下个月的第一天和最后一天

我个人只会做这个客户端。数据库查询获取您的实现需要从数据库中提取的任何数据;用户获得您的视图所需的任何信息。要查询数据库以获取创建视图所需的数据,您实际上不需要知道您所在月份的日期列表,因此它实际上不应该成为查询的一部分。

于 2013-07-01T13:12:41.480 回答