I have these model and DTOs
public class ServiceModel
{
public string ServiceId { get; set; }
public string ServiceName { get; set; }
public string ServiceTypeId { get; set; }
public double QuarterlyCharge { get; set; }
public double AnnualCharge { get; set; }
}
public class ServiceResponseDto
{
public string ServiceId { get; set; }
public string ServiceName { get; set; }
public IEnumerable<TaxDto> Tax { get; set; }
}
public class TaxDto
{
public string ServiceTypeId { get; set; }
public double QuarterlyCharge { get; set; }
public double AnnualCharge { get; set; }
}
I have IEnumerable of ServiceModel resulting into:
ServiceId | ServiceName | ServiceTypeId | AnnualCharge | QuarterlyChar |
---|---|---|---|---|
1 | Service | 1 | 1 | 1 |
1 | Service | 2 | 2 | 2 |
1 | Service | 3 | 3 | 3 |
How do I map it into ServiceResponseDto
This is my current solution
IEnumerable<IGrouping<string, ServiceModel>> groupedservice = serviceQueryResult.GroupBy(c => c.ServiceId);
ServiceResponseDto mappedService = _mapper.Map<IEnumerable<IGrouping<string, ServiceModel>>, ServiceResponseDto >(groupedservice );
My mapping:
CreateMap<IEnumerable<IGrouping<string, ServiceModel>>, ServiceResponseDto>()
.ForMember(dest => dest.ServiceId, opt => opt.MapFrom(src => src.FirstOrDefault().Key))
.ForMember(dest => dest.ServiceName, opt => opt.MapFrom(src => src.FirstOrDefault().FirstOrDefault().ServiceName))
.ForMember(dest => dest.Tax , opt => opt.MapFrom(src => src.Select(c => new TaxDto() { ServiceTypeId = c.FirstOrDefault().ServiceTypeId , QuarterlyCharge = c.FirstOrDefault().QuarterlyCharge, AnnualCharge = c.FirstOrDefault().AnnualCharge } )));
Expected Result:
new ServiceResponseDto()
{
ServiceId = "1",
ServiceName = "Service"
Tax = new IEnumerable<TaxDto>()
{
new = TaxDto(){ServiceTypeId=ServiceType1, QuarterlyCharge =1, AnnualCharge=1},
new = TaxDto(){ServiceTypeId=ServiceType2, QuarterlyCharge =2, AnnualCharge=2},
new = TaxDto(){ServiceTypeId=ServiceType3, QuarterlyCharge =3, AnnualCharge=3},
}
}
Actual Result: Only 1 record shows up after mapping
new ServiceResponseDto()
{
ServiceId = "1",
ServiceName = "Service"
Tax = new IEnumerable<TaxDto>()
{
new = TaxDto(){ServiceTypeId=ServiceType1, QuarterlyCharge =1, AnnualCharge=1}
}
}