2009-08-06 37 views
2

Linq to Sql(.net 3.5)では、特定のレコードの子を取得したときに、子のリストを特定の順序に戻すよう指定する方法はありますか?Linq to Sql Force Order

たとえば、「DisplayOrder」というリストがあります。私の親レコード/オブジェクトにこのリストを返すプロパティがあるかどうか聞いてみると、LinqがSqlにレコードを取得させたいが、 "DisplayOrder"で注文する。

はいつものようなものを記述することなくこれを行うことが可能です:私の頭の上から

MyObject.Children.OrderBy(c => c.DisplayOrder); 

アイデアは私のオブジェクトのための部分的なクラスを作成し、これをカプセル化「OrderedChildren」プロパティを追加することですコール。しかし、何かがない場合は、これを強制するためにdbmlで指定することができます。

答えて

4

DataLoadOptions.AssociateWith()メソッドは、特定の関係のすべてのオブジェクトをフィルタリングします。これは、Where(),OrderBy(),ThenBy(),OrderByDescending(),ThenByDescending()およびTake()を含む。

次のようなあなたのDataContextに部分メソッド内でこれを使用することができます:

partial class ExampleDataContext 
{ 
    partial void OnCreated() 
    { 
     DataLoadOptions dlo = new DataLoadOptions(); 
     dlo.AssociateWith<MyObject>(i => i.Children.OrderBy(c => c.DisplayOrder)); 
     LoadOptions = dlo; 
    } 
} 

あなたはLoadOptionsが他のクエリを実行する前に上書きされることはありませんことを確認したいと思います。

+0

「MyObject」の子レコードをロードするたびにこのアクションを実行するためのdbmlの操作方法があるかどうかを確認していました。ソート順のデフォルト設定をソートします。 – Brian

+0

これはdbml内に直接存在するわけではありませんが、今すぐ問題を処理する必要があります。 'MyObjects'テーブルをクエリするときにのみこれが起こることを確認する方法があるかもしれませんが、まだ見つかりませんでした。 –