Reputation: 2541
Hi I got the following linq for ordering my input after lowest value. But i would like it to only output the lowest values.
var sortedDict = (from entry in x where entry.Value > 0 orderby entry.Value ascending select entry);
Now if it gets the following input.
3 4 2 6 2
This would be my output
2 2 3 4 6
What do I need to change in my linq so I only get this output
2 2
Upvotes: 23
Views: 46168
Reputation: 513
You could try something like this:
data.Where (d => d == data.Min())
Note this is not necessarily the fastest way to do this.
Upvotes: 10
Reputation: 1500075
Well, you could do:
int min = x.Min(entry => entry.Value);
var lowestValues = x.Where(entry => entry.Value == min);
Note that I've explicitly split these up, as if you use Where(entry => entry.Value == x.Min(y => y.Value))
it will look for the minimum on every iteration. On the other hand, that's true of LINQ to Objects - but in LINQ to SQL it would probably be better to do it all in one query, and let the database sort it out.
Upvotes: 50
Reputation: 15623
First, find the lowest value:
var min = (from entry in x where entry.Value > 0 select entry).Min();
Then, select items:
var sortedDict = from entry in x where entry.Value == min select entry
Sorting is not needed for your scenario.
Upvotes: 6