LINQ query return same result despite different datasources
c#, linq
Solution
You are looping through `pos` in the second last `foreach`. It remembers a result from the least run. If you want a new result, you have to query `numbers` again before you print the result. Just do
Console.WriteLine();
numbers = new int[]{ 12, 14, -12, -8, 0, 17, 11, 10, -30, -15 };
Console.WriteLine("- - - All numbers - - - ");
foreach (var number in numbers)
Console.Write("{0} ", number);
pos = from number in numbers
where number > 0
select number;
Console.WriteLine();
Console.WriteLine("- - - Positive numbers ( Second ) - - -");
foreach (var number in pos)
Console.Write("{0} ", number);
I would propose to use the following instead, though.
foreach (var number in numbers.Where(n => n > 0))
Console.Write("{0} ", number);
EDIT:
This is one way to go.
Func<int, bool> comparer = n => n > 0;
foreach (var number in Compare(numbers, comparer))
System.Console.Write("{0} ", number);
`Compare` method being
public IEnumerable<int> Compare(IEnumerable<int> source, Func<int, bool> comparer)
{
return source.Where(comparer);
}
You could write an extension method as well. So many possible ways depending on what direction you want to go.
Problem
I'm trying the following : ``` int[] numbers = { 12, 14, -12, -8, 0, 17 }; var pos = from number in numbers where number > 0 select number; Console.WriteLine ( "- - - All numbers - - - " ); foreach (var number in numbers) Console.Write ( "{0} " , number ); Console.WriteLine(); Console.WriteLine ( "- - - Positive numbers ( First ) - - -" ); foreach ( var number in pos ) Console.Write("{0} ", number); Console.WriteLine(); numbers = new int[]{ 12, 14, -12, -8, 0, 17, 11, 10, -30, -15 }; Console.WriteLine("- - - All numbers - - - "); foreach (var number in numbers) Console.Write("{0} ", number); Console.WriteLine(); Console.WriteLine("- - - Positive numbers ( Second ) - - -"); foreach (var number in pos) Console.Write("{0} ", number); ``` Despite i change the elements in the array, i obtain the following results : ``` - - - All numbers - - - 12 14 -12 -8 0 17 - - - Positive numbers ( First ) - - - 12 14 17 - - - All numbers - - - 12 14 -12 -8 0 17 11 10 -30 -15 - - - Positive numbers ( Second ) - - - 12 14 17 ```