gulbaek
gulbaek

Reputation: 2541

Select only the lowest values with Linq

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

Answers (3)

kjn
kjn

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

Jon Skeet
Jon Skeet

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

Michael Damatov
Michael Damatov

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

Related Questions