我有一个包含两个实体的 ASP.NET Core MVC 应用程序:
Employee
和 Task
。这些实体具有一对多的关系。
A
Task
由受让人(分配给它的 Employee
)和截止日期以及其他属性组成。
我需要显示过去一个月完成任务最多的5位员工
我试过以下方法:
public async Task<IActionResult> Display()
{
int current_month = DateTime.Now.Month;
var employees = _context.Employees
.Include(t => t.EmployeeTasks)
.OrderByDescending(x =>
x.EmployeeTasks.Count(x => x.DueDate.Month == current_month - 1))
.Take(5);
return View(employees);
}
这个查询不正常,好像不识别条件
此查询无法正常工作 - 似乎无法识别条件
DueDate.Month == current_month - 1
.
有人知道如何更正这个查询吗?
使用 current_month 变量按截止日期过滤任务可能会导致查询问题。如果当前月份是一月(值为 1),则从 current_month 中减去 1 可能不会总是产生预期的结果。
要解决此问题,您可以修改查询以使用 DateTime 属性月和年根据截止日期过滤任务。使用以下查询,您可以过滤上个月到期的任务
// Get the start and end dates of the previous month
var currentDate = DateTime.Now;
var startDate = new DateTime(currentDate.Year, currentDate.Month, 1).AddMonths(-1);
var endDate = startDate.AddMonths(1).AddDays(-1);
// Retrieve the top 5 employees who completed the most tasks in the previous month
var employees = await _context.Employees
.Include(e => e.EmployeeTasks)
.OrderByDescending(e => e.EmployeeTasks.Count(t => t.DueDate >= startDate && t.DueDate <= endDate))
.Take(5)
.ToListAsync();