4

グリッド上で階層データバインディングを実行していますが、データベースサーバーにオブジェクトの並べ替えを実行させる必要があります。親コレクションは簡単に並べ替えることができますが、すべての子コレクションも並べ替える方法がわからないようです。子コレクションが3つの深さでネストされているモデルがあり、これらのコレクションはすべて並べ替える必要があります。

これが私が達成しようとしていることのサンプルモデルです:

    public class Year
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Make> Makes { get; set; }
}
public class Make
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Model> Models { get; set; }
}
public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Color> Colors { get; set; }
}
public class Color
{
    public int Id { get; set; }
    public string Name { get; set; }
}

「Year」オブジェクトのリストを読み込もうとしています。これには、色のコレクションを持つモデルのコレクションを持つメイクのコレクションがあります。これらのオブジェクトはすべて、nameプロパティに基づいて並べ替える必要があります。

私はこれをやってみました:

            List<Year> years = db.Years.OrderBy("it.Name")
                                   .Include("Makes").OrderBy("it.Name")
                                   .Include("Makes.Models").OrderBy("it.Name")
                                   .Include("Makes.Models.Colors").OrderBy("it.Name")
                                   .ToList();

しかし「それ」。は、選択されているテーブルのエイリアスにすぎません...この場合は「Years」です。子テーブルのエイリアスを作成して、単一のクエリで子テーブルでも並べ替えを実行できるようにする方法はありますか?

4

1 に答える 1

9

内部ナビゲーション プロパティ (モデルなど) に順序付けまたはフィルタリングが必要な場合、Include メソッドを使用してそれらを熱心にロードすることはできなくなりました。代わりに、次のようにEntityCollection<TEntity>.CreateSourceQuery メソッドを使用できます。

List years = db.Years.OrderBy("it.Name").ToList();
foreach(year in years) 
{
    var makesQuery = year.Makes.CreateSourceQuery().OrderBy(m => m.Name);
    year.Makes.Attach(makesQuery);  

    foreach(make in year.Makes) 
    {
        var modelsQuery = make.Models.CreateSourceQuery().OrderBy(m => m.Name);
        make.Models.Attach(modelsQuery);

        foreach(model in make.Models) 
        {
            var colQuery = model.Colors.CreateSourceQuery().OrderBy(c => c.Name);
            model.Models.Attach(colQuery);        
        }
    }
}

このようにして、すべてのナビゲーション プロパティが順序付けられた年オブジェクトが構築されます。

于 2010-11-11T17:22:52.750 に答える