如何使用LINQ获取包含在多个列表中的元素列表

本文关键字:列表 元素 何使用 LINQ 获取 包含 | 更新日期: 2023-09-27 18:21:15

假设我有代码:

  class Program
  {
    static void Main( string[] args )
    {
      Company companyA = new Company();
      Company companyB = new Company();
      companyA.Employees = new List<string> { "A1", "A2" };
      companyB.Employees = new List<string> { "B1", "B2" };
      List<Company> companyList = new List<Company> {companyA, companyB};
      List<string> allEmployees = new List<string>();
      foreach( Company company in companyList )
      {
        allEmployees.AddRange( company.Employees );
      }
      // ...
    }
    class Company
    {
      public List<string> Employees { get; set; }
    }
  }

我想用companyList中所有公司的员工填写allEmployees

不使用上面的代码,是否可以通过在companyList对象上使用单个LINQ语句来获得相同的结果?可能类似于:

List<string> allEmployees  = companyList.Select( ...? )

如何使用LINQ获取包含在多个列表中的元素列表

使用SelectMany

List<string> allEmployees = companyList.SelectMany(x => x.Employees).ToList();

您可以使用AddRange+SelectMany:

allEmployees.AddRange( companyList.SelectMany(c => c.Employees) );

如果你不想把它们添加到现有的列表中,而是想创建一个新的列表:

List<string> allEmployees = companyList.SelectMany(c => c.Employees).ToList();