使用 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 });
要求将姓名(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 });