1

私がこのような構造を持っている場合

 アルバム
    -アルバム
        -ディスク
            -トラック

最初のディスクの最初のトラックのタイトルでアルバムのコレクションを注文したいと思います。

次のようなことができますか(文字列を受け入れるOrderBy拡張メソッドを使用する必要があることに注意してください)?

albums.OrderBy("Discs[0].Tracks[0].Title")

文字列式を使用して並べ替えることができる必要があるため、OrderByメソッド(albums.OrderBy( "Track [0] .Title"))を使用する必要があります。この理由は、カスタムフレームワークが、辞書( "Track [0] .Title"など)で検索されるGridViewから返された並べ替え式( "Title"など)を使用して、正しいorderby句を取得するためです。つまり、並べ替えのフィールドと方向は、実行時に動的に決定されます。

また

albums.OrderBy("Discs.First().Tracks.First().Title")
4

4 に答える 4

3

テストされていませんが、どうですか:

    var query = from album in albums
                let disc = album.Discs.First()
                let track = disc.Tracks.First()
                orderby track.Title
                select album;
于 2009-03-03T01:09:30.237 に答える
2

LINQ には、"from . in .." と Lambda 式を照会する 2 つの方法があります。彼らはあなたがほとんど書いていたように、ラムダのように見えました. ラムダ式は次のようになります。

albums.OrderBy(a=>a.Discs.First().Tracks.First().Title)

アルバムを示すために変数「a」を使用しましたが、任意の変数を使用できます。これは最初の式と同じです。

albums.OrderBy(album=>album.Discs.First().Tracks.First().Title)

または、他の回答で言及されているように、from obj を obj 形式で使用できます。

于 2011-10-26T17:23:48.793 に答える
0

ソートを実行しない最初のクエリのニーズを満たすために、これはどうですか? これは匿名型を使用してアルバム情報と最初のトラックの名前を保存するため、後で並べ替えることができます。

var query = from album in albums
            let disc = album.Discs.First()
            let track = disc.Tracks.First()
            select new { Album = album, FirstTrack = track.Title };

var sortedQuery = from album in query
                  order by album.FirstTrack
                  select album.Album;
于 2009-03-03T18:54:47.990 に答える