LINQ where vs takewhile

Where can examine the whole sequence looking for matches.

Enumerable.Range(1, 10).Where(x => x % 2 == 1)
// 1, 3, 5, 7, 9

TakeWhile stops looking when it encounters the first non-match.

Enumerable.Range(1, 10).TakeWhile(x => x % 2 == 1)
// 1

TakeWhile stops when the condition is false, Where continues and find all elements matching the condition

var intList = new int[] { 1, 2, 3, 4, 5, -1, -2 };
Console.WriteLine("Where");
foreach (var i in intList.Where(x => x <= 3))
    Console.WriteLine(i);
Console.WriteLine("TakeWhile");
foreach (var i in intList.TakeWhile(x => x <= 3))
    Console.WriteLine(i);

Gives

Where
1
2
3
-1
-2
TakeWhile
1
2
3

Tags:

.Net

Linq