如何将空组添加到Linq查询结果集中
本文关键字:Linq 查询 结果 集中 添加 | 更新日期: 2023-09-27 18:20:29
我有一个非常简单的查询,它根据匹配月份从表中选择项目,然后按天分组。然后,这些组被用作中继器的数据源,中继器"每天"将组元素作为条目输出。
问题是,不存在的日子(即没有分组)自然不会显示,所以第6天和第8天的事情,当第7天什么都没有时,会直接相邻显示(想想日历视图)。问题是,考虑到我下面的查询,即使当天没有条目,我如何插入没有元素的组?
IQueryable events =
Events
.Where(i => i.Date.Month == date.Month)
.GroupBy(i => i.Date.Day);
我可以在事实之后计算,但我能解释一下吗?或者以前尝试过的&是否推荐经过测试的方法?
创建这样的结果集:
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 中获取下个月的第一个和最后一个日期
我个人会做这个客户端。数据库查询获取您的实现需要从数据库中提取的任何数据;用户可以获得视图所需的任何信息。要在数据库中查询创建视图所需的数据,实际上不需要知道月份中的日期列表,因此它不应该是查询的一部分。