The filter
expression is specified using a predicate.
The
following are the 2 overloaded versions of WHERE extension method in
Enumerable class
public static IEnumerable<TSource>
Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource,
bool> predicate);
public static IEnumerable<TSource>
Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource,
int, bool>
predicate);
What
is a Predicate?
A predicate is a function to test each element for a condition
In the following example, the Lambda expression (num => num % 2 == 0) runs for each element in List<int>. If the number is divisible by 2, then a boolean value true is returned otherwise false.
A predicate is a function to test each element for a condition
In the following example, the Lambda expression (num => num % 2 == 0) runs for each element in List<int>. If the number is divisible by 2, then a boolean value true is returned otherwise false.
static void Main()
{
List<int>
numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int>
evenNumbers = numbers.Where(num => num % 2 == 0);
foreach (int
evenNumber in evenNumbers)
{
Console.WriteLine(evenNumber);
}
}
// Using SQL like syntax
IEnumerable<int> evenNumbers = from num in numbers
where num % 2 == 0
select num;
Note: The where query operator is optional.
When you hover the mouse over WHERE method in the
above example, visual studio intellisense shows the following. Notice that in
this case, the predicate expects an int input parameter and returns a boolean
value. The lambda expression that is passed operates on an int type and should
return boolean, otherwise there will be compile time error.
IEnumerable<int> evenNumbers =
numbers.where(n=> n%2 ==0)
So this means, the line below from the above example
IEnumerable<int> evenNumbers = numbers.Where(num => num % 2
== 0);
can be rewritten as shown below
Func<int, bool> predicate = i => i
% 2 == 0;
IEnumerable<int> evenNumbers = numbers.Where(predicate); or
like below
static void Main()
{
List<int>
numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int>
evenNumbers = numbers.Where(num => IsEven(num));
foreach (int
evenNumber in evenNumbers)
{
Console.WriteLine(evenNumber);
}
}
public static bool IsEven(int
number)
{
if (number % 2 == 0)
{
return true;
}
else
{
return false;
}
}
}
Example 2:
The int parameter of the predicate function represents the index of the source element
The int parameter of the predicate function represents the index of the source element
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource>
source,
Func<TSource, int, bool> predicate);
The following program prints the index position of all the even numbers
namespace Demo
{
class Program
{
static void
Main()
{
List<int>
numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
IEnumerable<int>
evenNumberIndexPositions = numbers
.Select((num, index) => new { Number = num, Index
= index })
.Where(x => x.Number % 2 == 0)
.Select(x => x.Index);
foreach (int
evenNumber in evenNumberIndexPositions)
{
Console.WriteLine(evenNumber);
}
}
}
}
Write
a LINQ query to retrieve IT and HR department names and all the male employees with
in these 2 departments.
IEnumerable<Department>
departments = context.Departments
.Where(dept => dept.Name == "IT"
|| dept.Name == "HR");
foreach (Department
department in departments)
{
Console.WriteLine("Department
Name = " + department.Name);
foreach (Employee
employee in department.Employees.Where(emp => emp.Gender == "Male"))
{
Console.WriteLine("\tEmployee
Name = " + employee.FirstName
+ " " + employee.LastName);
}
Console.WriteLine();
}
0 comments:
Post a Comment