【发布时间】:2017-08-03 16:54:54
【问题描述】:
我有一个实体框架模型Schedule,它映射到一个表dbo.Schedule。 Schedule 中的两个字段是 hours (decimal) 和 week_ending (DateTime)。
我想将Schedule 表中的数据输出到 JSON,如下所示:
{
"week": [
"2017-08-11",
"2017-08-18",
"2017-08-25",
"2017-09-01"],
"hours": [
40,
40,
0,
30]
}
换句话说,我想将week_ending 和hours 结果连接到两个数组中,其中结果是grouped by 周,并在没有记录时为hours 插入一个0 值那一周。
我知道.DefaultIfEmpty() 可以完成类似后者的操作,但我不知道如何将“空”定义为“两个查询日期之间超过 7 天”(即缺少一周) . week_ending 值总是星期五,所以它们总是相隔 7 天。
我不知道从哪里开始...我有一个相当基本的 LINQ 查询,像这样(不相关的 Where 子句省略):
var data =
db.Schedules
.OrderBy(s => s.week_ending)
.Select(s => new
{
week = s.week_ending,
hours = s.hours
});
在序列化后生成这个 JSON:
[
{
"week": "2017-08-11",
"hours": 20
},
// I would like for this record to be grouped
// with the first into one "hours": 40 record
{
"week": "2017-08-11",
"hours": 20
},
{
"week": "2017-08-18",
"hours": 40
},
// there is no "2017-08-25 record in the DB,
// but I would like for one to be printed with "hours": 0
{
"week": "2017-09-01",
"hours": 30
}
]
【问题讨论】:
-
所以您想按周的时长和日历顺序对周进行分组,对吗?
-
不,只是按日历顺序。如果同一周有多个记录,我想将小时值加在一起。例如,如果我有两个
Schedules都带有week_ending =2017-08-11,一个是hours = 10,另一个是hours = 30,那么输出将有一个带有week = 2017-08-11和hours = 40的记录。