【发布时间】:2017-12-07 23:12:17
【问题描述】:
我有一个复杂的对象,我需要在一个简单 DTO 对象列表上进行翻译。
我的地图是这样的:
CreateMap<ObjASource, IEnumerable<MyDto>>()
.ConvertUsing(source => source.ObjB?.ObjC?.Select(p => new MyDto
{
field1 = source.field1,
field2 = source.field2,
field3 = source.field3,
field4 = p.fieldX,
field5 = p.fieldY
}).ToList()
);
当我使用 singol ObjA 时,这张地图效果很好
像这样mapper.Map<IList<MyDto>>(my_singol_objA); 但在我处理 ObjA 列表时不起作用mapper.Map<IList<MyDto>>(my_list_of_objA);
我不知道我必须添加哪种其他类型的地图来纠正这个问题。
谢谢大家
已编辑,因为我没有解决
我想以更简单的方式更好地解释我的问题,也许有人可以帮助我。 我在一个集合中有一个复杂的对象。
这样的对象:
public class Product {
int product_id {get; set;};
string name {get; set;};
List<CompaniesProvideProduct> company {get; }
}
CompanyProvideProduct 包含与销售该产品的公司的关系并具有更多详细信息。
public class CompaniesProvideProduct {
int product_id {get; set;};
int company_id {get; set;};
decimal price {get; set;};
}
那么我翻译的目标对象是:
public class ProductDto {
int product_id {get; set;};
string name {get; set;};
int company_id {get; set;};
decimal price {get; set;};
}
在我的程序中,我从 db 得到一个列表,我想在列表中翻译这个对象。对于 1 条 Product 记录,我将拥有更多 ProductDto 记录。
我试过了:
CreateMap<Product, ProductDto>(); //to get product_id and name
CreateMap<CompaniesProvideProduct, ProductDto>(); //to get company_id and price
CreateMap<Product, IEnumerable<ProductDto>>()
.ConvertUsing<ProductConverter>();
public class ProductConverter : ITypeConverter<Product, IEnumerable<ProductDto>>
{
IEnumerable<ProductDto> ITypeConverter<Product, IEnumerable<ProductDto>>.Convert(Product source, IEnumerable<ProductDto> destination, ResolutionContext context)
{
Product prod = source;
foreach (var dto in prod.company.Select(e => context.Mapper.Map<ProductDto>(e)))
{
context.Mapper.Map(prod, dto);
yield return dto;
}
}
}
但这对我不起作用。如果有人可以帮助我,我会很高兴。
谢谢。
【问题讨论】:
-
集合是默认处理的,不需要为它们映射。
-
谢谢@LucianBargaoanu 我知道这一点,但我的映射不正确,我收到错误。
标签: c# automapper