WORDS
Introduktion till Linq: SelectMany()
Här går vi igenom hur man väljer ut element i nästlade listor med SelectMany()
från Linq (Language Integrated Query).
Select()
och SelectMany()
Motsvarande i Javascript:
map()
ochflatMap()
.
Redan i första inlägget gick vi igenom hur Select()
fungerar: för varje element i listan väljer vi ett element som ska ingå i den resulterande listan. Med SelectMany()
kan vi välja flera stycken samtidigt.
SelectMany()
används ofta om man har en lista inuti en annan lista. I exemplet nedan har vi en lista med chefer, som var och en har en lista med anställda.
public class Manager
{
public string Name { get; set; }
public List<Employee> Employees { get; set; }
}
public class Example
{
/// <summary>
/// Hämta alla anställda hos dom givna cheferna.
/// </summary>
public IEnumerable<Employee> GetEmployees(IEnumerable<Manager> managers)
{
var result = managers
.SelectMany(manager => manager.Employees);
return result;
}
/// <summary>
/// Samma metod, men med tydligare lambdauttryck.
/// </summary>
public IEnumerable<Employee> GetEmployees2(IEnumerable<Manager> managers)
{
var result = managers
.SelectMany(manager => {
List<Employee> list = manager.Employees;
return list;
})
.ToList();
return result;
}
/// <summary>
/// Samma metod implementerad med `foreach` istället för Linq.
/// </summary>
public IEnumerable<Employee> GetEmployees3(IEnumerable<Manager> managers)
{
var result = new List<Employee>();
foreach (var manager in managers)
{
foreach (var employee in manager.Employees)
{
result.Add(employee);
}
}
return result;
}
}