3

単純なLINQの問題のように見えるものを多く検索しましたが、このような種類に頼らずに、指定された最小値(または最大値)を持つコレクションからオブジェクトを取得する方法を理解できません。 :

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Order By c.age Ascending).ToList.First

この(テストされていないコード)構造は、最初の値を抽出するためだけに顧客配列全体をソートしてリストに配置する必要があることを除いて、正常に機能します。それは最小値を取得するための最良の方法ではありません!

この場合、次のように実行できる顧客の最小年齢ではなく、cレコード全体が必要であることに注意してください(典型的な例)。

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c.age).Min

あるいは

dim customers= GetCustomers()

dim youngest = (From c in customers
                 Select c).Min(Function(x) x.age)

並べ替えに頼らずに、オブジェクト全体(またはインデックス)を取得する方法を一生理解することはできません...

4

3 に答える 3

6

繰り返しになりますが、C#コードですが、VB.NETで正しく取得できたかどうかはわかりません。

C#

  Customer youngest = customers.Aggregate((c1, c2) => (c1.age < c2.age) ? c1 : c2);

VB.NET

  dim youngest = customers.Aggregate( Function(ByVal c1, ByVal c2) IF( (c1.age < c2.age) , c1 , c2  ) );
于 2011-03-18T23:26:25.793 に答える
1

通常のLINQには、全体の並べ替えを回避するような演算子はありませんIEnumerable。しかし、あなたは解決策を必要とする最初の人ではありません。たとえば、ここでJasonの回答を確認してください(MaxByC#ですが、アイデアは得られます):C#での単純なLINQの質問

またはMoreLinqMinByから

于 2011-03-18T23:32:30.390 に答える
0

もうすぐです。あなたはそれを見つける必要があります

dim youngest = (From c in customers
                Order By c.age Ascending
                Select c).First

あなたが探していることをします。(私はVB.NETの人ではなく、C#の人なので、構文が少しずれている可能性があります。)

于 2011-03-18T22:59:56.290 に答える