- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Entity Framework 模型 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
结果连接成两个数组,其中结果按分组
周,并且当该周没有记录时,为 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
}
]
最佳答案
您可能会考虑以下方法
data
对象以匹配所需的输出代码可能如下所示以所需格式保留 data
:
// Simulate linq connection
var db = new
{
Schedules = new List<Schedule>
{
new Schedule() { hours = 40, week_ending = new DateTime(2017,8,11) },
new Schedule() { hours = 20, week_ending = new DateTime(2017,8,18) }, // Simulating multiple records
new Schedule() { hours = 20, week_ending = new DateTime(2017,8,18) }, // Simulating multiple records
// No records for 8/25
new Schedule() { hours = 30, week_ending = new DateTime(2017,9,1) },
}
};
// Need a start/end date so you can generate missing weeks
var startDate = new DateTime(2017, 8, 11);
var endDate = new DateTime(2017, 9, 1);
// Enumerate schedules from db
var schedules = db.Schedules // Add any other criteria besides date logic
.Where(m => m.week_ending >= startDate && m.week_ending <= endDate)
.GroupBy(m => m.week_ending)
.Select(m => new Schedule() { week_ending = m.Key, hours = m.Sum(s => s.hours) })
.AsEnumerable();
// Add missing dates
var results = Enumerable.Range(0, 1 + endDate.Subtract(startDate).Days)
.Select(m => startDate.AddDays(m))
.Where(m => m.DayOfWeek == DayOfWeek.Friday) // Only end of week
.Where(m => schedules.Any(s => s.week_ending == m) == false) // Add missing weeks
.Select(m => new Schedule() { week_ending = m, hours = 0 })
.Union(schedules)
.OrderBy(m => m.week_ending);
// Enumerate the ordered schedules matching your criteria
var data = new
{
week = results.Select(m => m.week_ending),
hours = results.Select(m => m.hours)
};
关于c# - .DefaultIfEmpty() 基于日期值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45490381/
我有一个 Entity Framework 模型 Schedule 映射到表 dbo.Schedule。 Schedule 中的两个字段是 hours(decimal)和 week_ending(Da
为什么在 DefaultIfEmpty 查询后数组仍然为空? class Program { static void Main(string[] args) { Pro
我有这门课: class OriginalClass { string FirstItem; List ListOfSecondItems; } 我想将一个类的列表转换为另一个类的列表,或者将
我编写了以下 linq 查询,它通过将数据连接在一起来创建一个新对象,如您所见: var translations = from t in context.Translations
您好,我正在尝试在 IQueryable 上使用 DefaultIfEmpty() 函数,它会抛出异常“不支持用于查询运算符‘DefaultIfEmpty’的重载。”这是我的代码: Dinner d
我正在寻找解决 DefaultIfEmpty() 问题的方法在 LINQ 外连接中使用时,扩展方法不获取空值。 代码如下: var SummaryLossesWithNets
有人能解释一下如何DefaultIfEmpty()可以在 LINQ 中使用。我已经准备好了一些 Material ,但仍然需要一些扎实的东西来看看它的用途。 最佳答案 如果源集合为空,它基本上返回一个
我正在使用 C#、.NET4.5、EF6(实际上应该不重要)。 我从数据库中选择一些值,然后.ToList()它们,然后添加DefaultIfEmpty(new ActualFee{Net = 0,
追踪 System.Linq.Enumerable.DefaultIfEmpty 的实现让我找到了这个方法。除了以下古怪的细节外,它看起来还不错: // System.Linq.Enumerable
好像rx-swift还没有实现DefaultIfEmpty .有没有其他方法可以模仿这种行为? let myList:[Int] = [] myList.toObservable() .swi
我在 MSDN 上看到一个示例,如果没有返回任何内容,它会让您指定默认值。见下文: List months = new List { }; int firstMonth2 = months.Defau
leftOuterJoin 的文档Query Expressions on MSDN通过样本反复暗示使用 leftOuterJoin .. on .. into .. 时您仍然必须使用 .Defaul
有人可以向我解释这里出了什么问题吗?我正在使用 Linq to Sql 创建一个非常讨厌的查询。 我遇到的问题是我需要在某些表上进行左连接(使用 DefaultIfEmpty)我需要从DefaultI
我正在构建一些 Linq 表达式并试图获取 IEnumerable.DefaultIfEmpty ( http://msdn.microsoft.com/en-us/library/bb360179.
有一组设备类型,其中一些支持配置设置。我正在尝试获取所有设备类型和任何适用设置的列表。 此查询不会选取没有 DeviceParameters 的设备。如果我添加 .DefaultIfEmpty() 如
搜索了很多之后,我找不到 F# 等效的 Enumerable.DefaultIfEmpty . F# 中是否存在类似的东西(也许以不同的惯用方式)? 最佳答案 为了保持序列的惰性,我们可以使用枚举器的
我有以下数据库结构(简化) 店铺 StoreId RateId 产品 ProductId Name 费率 RateId Name IsDefault 价格 PriceId ProductID Rate
我正在尝试使用 .DefaultIfEmpty() 语法使用具有大量左连接的 Oracle EF 框架(Oracle.ManagedDataAccess.EntityFramework nuget 包
var query = from r in list where r.Id == "" DefaultIfEmpty(String.Empty) 不起作用。 我如何编写具有查询样式的 linq 查询并
我正在尝试拉下联系人的 NULLS,我正在使用 DefaultIfEmpty 来执行此操作。但是我收到了这个错误。 “方法‘GroupJoin’不能跟在方法‘Join’之后或不受支持。尝试根据支持的方
我是一名优秀的程序员,十分优秀!