Выберите только самые низкие значения с Linq - PullRequest
13 голосов
/ 29 сентября 2010

Привет, я получил следующий linq для упорядочения ввода после минимального значения.Но я бы хотел, чтобы он выводил только самые низкие значения.

var sortedDict = (from entry in x where entry.Value > 0 orderby entry.Value ascending select entry);

Теперь, если он получит следующий ввод.

3  4  2  6  2

Это будет мой вывод

2  2  3  4  6

Что мне нужно изменить в моем linq, чтобы я получил только этот вывод

2  2

Ответы [ 3 ]

37 голосов
/ 29 сентября 2010

Ну, вы могли бы сделать:

int min = x.Min(entry => entry.Value);
var lowestValues = x.Where(entry => entry.Value == min);

Обратите внимание, что я явно разделил их, как если бы вы использовали Where(entry => entry.Value == x.Min(y => y.Value)), он будет искать минимум на на каждой итерации . С другой стороны, это верно для LINQ to Objects - но в LINQ to SQL, вероятно, было бы лучше сделать все это в одном запросе и позволить базе данных разобраться.

8 голосов
/ 29 сентября 2010

Вы можете попробовать что-то вроде этого:

data.Where (d => d == data.Min())

Обратите внимание, что это не обязательно самый быстрый способ сделать это.

6 голосов
/ 29 сентября 2010

Сначала найдите самое низкое значение:

var min = (from entry in x where entry.Value > 0 select entry).Min();

Затем выберите элементы:

var sortedDict = from entry in x where entry.Value == min select entry

Для вашего сценария сортировка не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...