4

そのため、私のドメインモデルにはChildren、現在のオブジェクトのIDを持つすべてのメニューを返すという名前のプロパティがあります。ビューモデルを作成し、コントローラーでそれらの間の値をマップしたいと思います。したがって、Childrenプロパティはタイプです。それを行う最も簡単な方法は何でしょうか?すべての子をスピンして現在のモデルに手動で追加し、すべてのレベルでそれを繰り返す必要がありますか?IEnumerable<MenuModel>menu.ChildrenIEnumerable<MenuCache>

モデル:

public class MenuModel
{
    public int ID { get; set; }

    public string URL { get; set; }

    public int ParentID { get; set; }

    public IEnumerable<MenuModel> Children { get; set; }
}

コントローラ:

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x=> x.ID == 0).FirstOrDefault();
    model = new MenuModel()
    {
        ID = menu.ID,
        URL = menu.Text,
        ParentID = menu.ParentID,
        Children = menu.Children // how do I get those children?
   };
}
4

1 に答える 1

2

LINQを使用できます:

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
    model = new MenuModel()
    {
        ID = menu.ID,
        URL = menu.Text,
        ParentID = menu.ParentID,
        Children = menu.Children.Select(x => new MenuModel
        {
            Prop1 = x.Prop1,
            Prop2 = x.Prop2,
            // and so on ...
        })
   };
}

または私が強くお勧めするAutoMapper 。したがって、対応するマッピングを定義すると、コントローラーのアクションがはるかに読みやすくなります。

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
    model = Mapper.Map<MenuCache, MenuModel>(menu);
}
于 2012-08-24T19:54:56.863 に答える