2014-09-10 47 views
2

說我有代碼:如何使用LINQ獲取包含在多個列表中的元素列表?

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; } 
    } 
    } 

我要填寫allEmployees與所有公司員工在companyList

而不是使用上面的代碼,是否有可能通過在companyList對象上使用單個LINQ語句獲得相同的結果?可能是這樣的:

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

回答

4

使用SelectMany

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

謝謝!這正是我想要的! – 2014-09-10 08:58:21

2

您可以使用AddRange + SelectMany

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

如果你不希望將其添加到一個已經存在的列表,但創建一個新的:

List<string> allEmployees = companyList.SelectMany(c => c.Employees).ToList(); 
相關問題