使用Linq从Model中填充ViewModel

时间:2013-11-26 01:01:28

标签: c# asp.net-mvc linq mapping viewmodel

我正在从linq查询填充我的viewmodels。我有一个方法来检索看起来像这样的计划列表

        public static IEnumerable<PlanViewModel> GetPlans()
        {
        using (var context = new RepEntities())
        {

            var query = (from p in context.Plans.Include("StatusCommon")
                         join r in context.RealEstateDetails on p.ReId equals r.ReId
                         select new PlanViewModel
                         {
                             PlanName = p.PlanName,
                             ...
                             LastUpdated = p.LastUpdated,
                         });

            return query.ToList();
        }
    }

您看到省略号大约有30个其他属性。现在我想构建一个返回单个Plan的方法。该方法实际上是相同的,只是它将包含一个where子句来指定计划Id。我想重构这段代码,这样我就不会重复模型到ViewModel的映射。但是,我找不到允许我这样做的方法。任何人都可以提供任何关于如何正确编码的建议,以便这里没有那么多的重复?

提前致谢!

1 个答案:

答案 0 :(得分:1)

使用反射来填充字段,或使用像AutoMapper这样的库。我绝对建议使用AutoMapper,它会让你的代码更清晰。

另一种可能性是使用implicitexplicit转换器。

这很大程度上取决于你想要代码的位置:

  • 效用类(反射)
  • Models / ViewModels(隐式或显式)
  • Anywere(AutoMapper)