2011-02-02 8 views
0

ShowTimesとMoviesの2つのテーブルがあるとします。各ムービーは、関連するショータイムのリストを持つことができます。 ShowTimeテーブルにStartTimeというDateTimeフィールドが含まれているとします。ショータイムはテーブルに任意の順序で表示できます(シアターマネージャーはいつでも新しいショーを追加できます)。LINQ-to-SQL:読み込み時に関連するエンティティをソートする

したがって、LINQツーSQLムービーオブジェクトは、それが最初にアクセスされたときにロードされる

public EntitySet<ShowTime> ShowTimes; 

フィールドを含むであろう。

ShowTimeのソート順を制御して、ロード時にStartTimeでソートされるような方法はありますか?または私はそれを使用する前に私はそれを並べ替える必要がありますか? ShowTimesテーブルの「自然順序」を制御できますか?デフォルトでは、主キー(私の場合は整数)でソートされていますが、StartTimeでソートするように指定できますか?

答えて

4

あなたは子エンティティDataLoadOptions.AssociateWith()とためデフォルトのソート順を設定することができます。例えば

LoadOptionsだけDataContextで一度に設定することができることを

DataContext context = new DataContext(); 

DataLoadOptions options = new DataLoadOptions(); 

options.AssociateWith<Movie>(movie => movie.ShowTimes 
        .OrderBy(showtime => showtime.StartTime)); 

context.LoadOptions = options; 

// do your queries here, after the LoadOptions has been set 

は注意してください。

また、DataLoadOptionsは、子エンティティeager loadに使用できます。

+0

恐ろしい!ロードオプションを設定しようとしていて、他の場所でこれを見つけることができませんでした。ほとんどの答えは、読み込まれた後にリストをソートすることでした。私は見た目が醜く、潜在的に遅いと思っていました。ありがとう!! – RonaDona

0

.ToList()、.ToArray()、または.ToDictionary()を使用して、遅延読み込みをバイパスすることができます。

IEnumerable<ShowTime> ShowTimes = 
    (from showtime in DataContext.ShowTimes 
    order by showtime.StartTime 
    select showtime).ToList(); 
関連する問題