所以我的域模型有一个名为Children
的属性,它返回所有具有当前对象ID的菜单。我想创建一个视图模型,并在控制器中映射它们之间的值。因此Children
属性为IEnumerable<MenuModel>
,menu.Children
属于IEnumerable<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?
};
}
答案 0 :(得分: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);
}