web-dev-qa-db-ja.com

Linqで最も低い値のみを選択します

こんにちは私は最小値の後に入力を注文するために次の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
16
gulbaek

まあ、あなたはすることができます:

_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では、すべてを1つのクエリで実行し、データベースに分類させると、おそらくより良いになります。

37
Jon Skeet

あなたはこのようなことを試すことができます:

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

これが必ずしもこれを行うための最速の方法ではないことに注意してください。

8
kjn

まず、最小値を見つけます。

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

シナリオに並べ替えは必要ありません。

6
Michael Damatov