我有部门 list 。每个部门都有一份员工名单。我需要归还此列表中2015年1月15日之后雇用的所有员工。但是我需要返回“Roster”列表,即List<Roster>。我需要有关LINQ查询的帮助。

这是我系的课

public class Department
{
   public int DepartmentId { get; set; }
   public string DepartmentName { get; set; }
   public List<Employee> Employees { get; set; } = new List<Employee>();
   public string Location { get; set; }
}

我的员工类(class)是这样的:
public class Employee
{
   public int EmployeeId { get; set; }
   public Guid PersonId { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string Gender { get; set; }
   public DateTime DateOfBirth { get; set; }
   public DateTime HireDate { get; set; }
}

这是我的花名册
public class Roster
{
   public int DepartmentId { get; set; }
   public string DepartmentName { get; set; }
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public string Gender { get; set; }
   public DateTime HireDate { get; set; }
}

到目前为止,这是我的查询内容:
var employees = departments.Where(x => x.Employees).Any(o => o.HireDate >= Convert.ToDateTime("1/15/2015")).Select(i => new Roster { ??? }).ToList();

请记住,我要返回List<Roster>,并且需要在结果中同时包含部门和员工信息。我不确定如何从Department对象获取一些数据并从Employee获取一些数据来创建名册类。谢谢。

最佳答案

var rosters = departments.SelectMany(
    x => x.Employees
      .Where(y => y.HireDate >= Convert.ToDateTime("1/15/2015"))
      .Select(y => new Roster{ DepartmentId = x.DepartmentId, DepartmentName = x.DepartmentName, FirstName = y.FirstName, LastName = y.LastName, Gender = y.Gender, HireDate = y.HireDate})
  ).ToList();

根据大众需求–说明:
departments.SelectMany(x => x.Employees…) –将来自所有部门的员工加入单个员工列表中。
.Where(…) –仅过滤特定日期之后被雇用的员工
.Select(y => new Roster{…}) –为每个选定的雇员创建Roster对象。此时,我们可以访问两个lambda变量(x –代表部门,y –员工),并可以使用它们来填充Roster对象字段。

警告:
如果将雇员分配到多个部门,则将提供副本。

09-15 17:29