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
来自 Employee
和 DepartmentName
来自 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 结构并删除了包含的导航属性,因此一旦您拥有所需的结构,就必须包含。
我有一个名为 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
来自 Employee
和 DepartmentName
来自 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 结构并删除了包含的导航属性,因此一旦您拥有所需的结构,就必须包含。