Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What do they mean when they say LINQ is composable?

Tags:

linq

What does it mean and why (if at all) is it important?

like image 207
Larsenal Avatar asked Dec 09 '25 15:12

Larsenal


2 Answers

It means you can add additional "operators" to a query. It's important because you can do it extremely efficiently.

For example, let's say you have a method that returns a list (enumerable) of employees:

var employees = GetEmployees();

and another method that uses that one to return all managers:

IEnumerable<Employee> GetManagers()
{
    return GetEmployees().Where(e => e.IsManager);
}

You can call that function to get managers that are approaching retirement and send them an email like this:

foreach (var manager in GetManagers().Where(m => m.Age >= 65) )
{
   SendPreRetirementMessage(manager);
}

Pop quiz: How many times will that iterate over your employees list? The answer is exactly once; the entire operation is still just O(n)!

Also, I don't need to have separate methods for this. I could compose a query with these steps all in one place:

var retiringManagers = GetEmployees();
retiringManagers = retiringManagers.Where(e => e.IsManager);
retiringManagers = retiringManagers.Where(m => m.Age >= 65);
foreach (var manager in retiringMangers)
{
    SendPreRetirementMessage();
}

One cool thing about this is that I can change is at run time, such that I can include or not include one part of the composition inside an if block, such that the decision to use a specific filter is made at run time, and everything still comes out nice and pretty.

like image 73
Joel Coehoorn Avatar answered Dec 12 '25 05:12

Joel Coehoorn


I think it means that you can daisy chain your queries, like this

var peterJacksonsTotalBoxOffice
    = movies.Where(movie => movie.Director == "Peter Jackson")
        .Sum(movie => movie.BoxOffice);
like image 31
Jan Aagaard Avatar answered Dec 12 '25 06:12

Jan Aagaard



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!