加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 使用IEnumerable在域模型和视图模型之间进行映

发布时间:2020-12-16 09:47:55 所属栏目:asp.Net 来源:网络整理
导读:所以我的域模型有一个名为Children的属性,它返回所有具有当前对象ID的菜单.我想创建一个视图模型,并在控制器中映射它们之间的值.所以Children属性是IEnumerable MenuModel和menu.Children的类型为IEnumerable MenuCache.最简单的方法是什么?我是否需要旋转
所以我的域模型有一个名为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?
   };
}

解决方法

您可以使用LINQ:

using (var context = ww.WebObjs.WebDataContext.Get())
{
    var menu = context.MenuCaches.Where(x => x.ID == 0).FirstOrDefault();
    model = new MenuModel()
    {
        ID = menu.ID,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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读