【发布时间】:2021-04-28 22:08:16
【问题描述】:
我有如下数据:
Table : LeaveRequest
Id DepartmentId
1 100
Table: LeaveUpdateLogs
Id RequestedDate LeaveRequestId Status
1 2020-01-26 11:55:56 1 Pending
2 2020-02-24 10:55:56 1 Accepted
3 2020-02-24 11:55:56 1 Accepted
4 2020-03-01 09:55:56 1 Declined
5 2020-03-27 10:55:56 1 Closed
6 2020-01-09 05:55:56 2 Pending
6 2020-02-09 05:55:56 2 Accepted
7 2020-05-12 02:55:56 2 Accepted
8 2020-06-14 05:55:56 2 Declined
9 2020-06-15 05:55:56 2 Closed
我想计算Start date and EndDate 之间的统计信息,并想计算每个状态的统计信息。
预期输出:开始日期 = 01-01-2020 结束日期 = 06-30-2020
Pending = 2 (2020-01-26 11:55:56,2020-01-09 05:55:56)
Accepted = 3 (2020-02-24 11:55:56,2020-02-09 05:55:56,2020-05-12 02:55:56)
Declined = 0
Closed = 2 (2020-03-27 10:55:56, 2020-06-15 05:55:56)
类:
public class LeaveRequest
{
public int Id { get; set; }
public int DepartmentId { get; set; }
public virtual ICollection<LeaveUpdateLogs> LeaveUpdateLogs { get; set; }
}
public class LeaveUpdateLogs
{
public int Id { get; set; }
public DateTimeOffset RequestedDate { get; set; }
public int LeaveRequestId { get; set; }
public string Status { get; set; }
public virtual LeaveRequest LeaveRequest { get; set; }
}
查询:
var query = from l in context.LeaveUpdateLogs
where l.LeaveRequest.DepartmentId == 100 &&
(l.RequestedDate >= fromDate && l.RequestedDate < toDate)
对我来说唯一的挑战是计算同一个月和同一 LeaveRequestId 的数据。例如:
Id RequestedDate LeaveRequestId Status
4 2020-03-01 09:55:56 1 Declined
5 2020-03-27 10:55:56 1 Closed
对于上述数据,我们在同一个月有 2 个状态,对于相同的 LeaveRequestId 即 1,但我想考虑该月的最后日期(“2020-03-27”)并为该状态增加 1(“关闭")。
我将非常感谢任何帮助:)
【问题讨论】:
-
我希望您的查询包含 group by,,
-
@CaiusJard 是的,我同意,但问题是如果我按“LeaveRequestId”分组,那么我将无法计算我在预期输出中提到的所有状态的统计信息。所以这就是问题所在。我可能会像这样将 group by "group l by 1 into g" 伪装成这样,但是我不知道这个月我会做什么。如果您能详细说明按什么分组,我将不胜感激
标签: c# entity-framework linq entity-framework-6