使用 Automapper 将对象嵌套到一个对象

Nested objects to one object using Automapper

要求将姓名(Class A)和phone号码(Class B)映射到同时具有姓名和电话号码的Class C。一个人(姓名)可以有多个 phone 个号码。

public class A
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual IList<B> B { get; set; }
}

public class B
{
    public int A_ID { get; set; }
    public string PhoneNumber { get; set; }
}

public class C
{
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
}

从数据库中获取 A class(其中有 B)详细信息,需要将其映射到 Class C。

public class Activity
{
    public IList<C> GetContacts(string name)
    {
        using (ModelEntities ctx = new ModelEntities())
        {
            Mapper.CreateMap<A, C>();
            Mapper.CreateMap<B, C>();

            var result =
                ctx.A.SingleOrDefault(ss => ss.Name == name);

        }
    }
}

谁能帮我用 Automapper 做地图?

谢谢

AutoMapper 无法从单个实例映射到多个实例。它必须是实例到实例或可枚举到可枚举。我能看到的最佳路径是简单地将 IList<B> 映射到 IList<C>,然后回填 Name 属性。大致如下:

var c = Mapper.Map<IList<C>>(a.B);
c.ToList().ForEach(m => m.Name = a.Name);

但是,除非您的映射比这更复杂,否则 AutoMapper 就太过分了。你可以简单地做:

var c = a.B.Select(b => new C { Name = a.Name, PhoneNumber = b.PhoneNumber });