Select 具有最高日期的记录并包含相关表 - LINQ

Select the record with highest date and INCLUDE relevant tables with it - LINQ

我有一个名为 EmployementContracts 的 table,我想为每位员工检索每份最高 StartDate 的合同,包括来自 linked/relevant [=26] 的一些其他属性=]秒。我试过如下:

_dbContext.EmployementContracts
                .Include(x => x.Employee)
                .Include(x => x.Department)
                .Where(x => x.SupervisorId == 1)
                .GroupBy(c => c.EmployeeId)
                .Select(g => new
                {
                    StartDate = g.Max(x => x.StartDate)
                }).ToList();

我只能从中获取 StartDate 列(每条记录的最高日期),但是如何从包含的 table 中获取一些其他属性?

例如我需要: EmployeeName 来自 EmployeeDepartmentName 来自 Department table。

您的 select 陈述就是您将要得到的结果。您的结果只是一个具有一个字段 StartDate 的匿名对象。您可以在那里调用 .Select() 以 return 您的整个搜索以及匿名对象的表和数据。

我建议您使用以下代码:

_dbContext.EmployeeContracts
   .Where(x => x.SuperVisorId == 1)
   .GroupBy(x => x.EmployeeId)
   .Select(x=>x.OrderByDescending(y=>y.StartDate).FirstOrDefault())
   .Include(x => x.Employee)
   .Include(x => x.Department)
   .ToList();

诀窍是只从分组中检索相关记录。那么每个组中的每条记录正是您要查看的 employeeContract。另请注意,.Include() 语句移到了后面。这是因为分组更改了 Queryable 结构并删除了包含的导航属性,因此一旦您拥有所需的结构,就必须包含。