所以我的域模型有一个名为 Children
的属性它返回带有当前对象 ID 的所有菜单。我想创建一个 View 模型并在 Controller 中映射它们之间的值。所以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; }
}
Controller :
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?
};
}
最佳答案
您可以使用 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我强烈推荐。因此,在定义相应的映射后,您的 Controller 操作将变得更具可读性:
using (var context = ww.WebObjs.WebDataContext.Get())
{
var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
model = Mapper.Map<MenuCache, MenuModel>(menu);
}
关于asp.net-mvc-3 - 使用 IEnumerable 在域模型和 View 模型之间进行映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12115764/