Filtering data with lambda expressions
Lambda expressions are anonymous functions you can define inline.
Func<int, bool> isGreaterThanZero = x => x > 0; Console.WriteLine(isGreaterThanZero(10)) // true Console.WriteLine(isGreaterThanZero(-4)) // false
x => x > 0 is the lambda expression.
=>operator is the lambda operator.
- To the left of the lambda operator you see the input parameters (
- To the right of the lambda operator you see the expression that is executed when calling the function (
x > 0).
The types of input argument and return value are not explicitly stated in the lambda expression.
They are inferred by the context.
In the example above we assign the lambda expression
x => x > 0 to a variable of type
Func<int, bool>, which means a function with an
int as input (
x) and a
bool as output (
x > 0).
Lambda expressions applied
The code explained
FilterNumbers is unchanged.
We removed the two explicitly defined filter methods
IsSmallerThanZero and put their content directly as lambda expressions into
KeepPositiveNumbers we assign the lambda expression to a variable.
KeepNegativeNumbers we directly pass the lambda expression as argument to
It can't hardly get simpler
KeepNegativeNumbers are now really tight - that's fine.
The only method with some complexity left is
Here, we have to enumerate the original
numbers and add them to
filteredNumbers if our
filterPredicate evaluates to true.
But isn`t the concept of filtering a collection of elements always the same, no matter if we have a collection of numbers, or timestamps, or any other type of objects?
It is! And finally we are at the heart of this tutorial: LINQ