与LINQ如何Automapper?(Automapper with linq how?)

2019-10-19 01:44发布

好吧,我真的发现什么,我需要做一个很好的例子挣扎。 所以,我会问这里。

比方说,我有一个实体类(EF)命名的客户和一个名为CustomerViewModel相应的视图模型类。

使用AutoMapper,我创建了以下映射:

 Mapper.CreateMap<CustomerViewModel, Customer>(); 
 Mapper.CreateMap<Customer, CustomerViewModel>();

我将如何修改下面的代码利用这一映射?

    public static List<CustomerViewModel> GetCustomers()
    {
        using (var context = new GCSBaseEntities())
        {
            var query = from c in context.Customers
                        select new CustomerViewModel
                        {
                            CompanyName = c.CompanyName,
                            Id = c.Id,
                            EmailAddress = c.EmailAddress,
                            FirstName = c.FirstName,
                            LastName = c.LastName,
                            MiddleName = c.MiddleName,
                            ModifiedDate = c.ModifiedDate,
                            Phone = c.Phone,
                            SalesPerson = c.SalesPerson,
                            Suffix = c.Suffix,
                            Title = c.Title,
                            FullName = c.FirstName + " " + c.LastName
                        };

            return query.ToList();
        }
    } 

提前致谢。

Answer 1:

当你注册你的映射,必须提供具有发生任何复杂的映射操作。 在你的情况,我相信所有的特性相匹配,除FullName = c.FirstName + " " + c.LastName 。 这是你的客户到CustomerViewModel映射应该是什么样子:

Mapper.CreateMap<Customer, CustomerViewModel>()
       .ForMember(custVm => custVm.FullName,
            mapper => mapper.MapFrom(cust => cust.FirstName + " " + cust.LastName));

你必须弄清楚如何推的FullName从视图模型道具放回FirstNameLastName的EF类领域,虽然。 但是,当你决定如何实现它,请从上面的图案为其他映射。

您的查询现在可以MUUUCH较小:

using (var context = new GCSBaseEntities()) 
{
     return from c in context.Customers
            select Mapper.Map<CustomerViewModel>(c);
}


Answer 2:

弄清楚了。 为了避免上述错误,你有一个像这样的客户后,加入呼叫的.AsEnumerable():

     return from c in context.Customers.AsEnumerable()
        select Mapper.Map<CustomerViewModel>(c);

我得到这个从这个线程: LINQ和AutoMapper



文章来源: Automapper with linq how?