2009-03-11 23 views
3

LINQの子オブジェクトでどのようにオーダーするのですか?LINQの子プロパティで親オブジェクトをオーダー

クラスA、B、CのAはBのコレクションを持っており、Bは、私はC.

の序数(int型)プロパティ
var query = from a in db.A 
     orderby a.Bs.OrderBy(x=> x.C.Ordinal) <--- ?? 
     select a; 

IによってオブジェクトAを注文したいC.のコレクションを持っていますこのためにorderbyステートメントを理解しているようには見えません。

EDIT:

申し訳ありませんが、私の元の文が間違っていた:

AはBのコレクションを持っており、BはCのオブジェクトを保持しています。 Cはコレクションではありません。

各Aは、Cの序数プロパティで注文する必要があります。

ANOTHER EDIT /ソリューション:

私は、表示中にAの各B収集のために、クライアント上で(=> b.C.Ordinal B).OrderByをやってしまいました。それは私のリポジトリに埋め込むのではなく、必要なものをクライアントに注文させることができるので、とにかくうまくいっています。

+0

あなたはでそれを注文したいです* * * Cの順序性?最大、平均、最小、正確には何ですか? –

答えて

5

は実物の面でこれについて考え - あなたは自分の子供の年齢によって両親を注文しようとしている場合、子供の年齢あなたは考慮する? 1歳と5歳の子供がいる親が1人、2歳と4歳の子供が1人いる場合は、最初に来るはずですか?

+0

数秒で私を倒してください。 –

+0

子供の2,3,4人が2,5,8人、3,4,5人いる場合は、最初に小さい数字で注文したい場合はどうすればいいですか? – Dan

+1

@ダン:最初の子を気にしなかったなら、それは簡単です: 'OrderBy(p => p.Children.Min(c => c.Age))'。最初の子供が注文すると、2番目の子供などはLINQで表現するのが難しいです。 –

2

コレクションで注文しようとしています。それは動作しません。 1つの要素を選択するか、子リストから単一の値を集める必要があります。 。あなたが興味を持っている C をうまくする必要が

1

私はアメリカの本能を適用し、各A.

IEnumerable<A> result = db.As 
    .OrderBy(a => a.Bs 
    .Max(b => b.C.Ordinal) 
); 

編集のための最大のC.Ordinalで注文したいと仮定します:のために更新され、私は終了

0

b.Csは、コレクションではありません」表示中にAの各Bコレクションのクライアント上で.OrderBy(b => bCOrdinal)を実行します。それは私のリポジトリに埋め込むのではなく、必要なものをクライアントに注文させることができるので、とにかくうまくいっています。

1

これは、あなたが正確に探しているものではないかもしれないが、それはあなたにいくつかのアイデアを与えることがあります。

.OrderBy(B => bCFirstOrDefault()序。)

関連する問題