using System.Collections.Generic;
public static void Main()
var config = new MapperConfiguration(cfg =>
cfg.CreateMap<IGrouping<string, ServiceModel>, ServiceResponseDto>()
.ForMember(dest => dest.ServiceId, opt => opt.MapFrom(src => src.Key))
.ForMember(dest => dest.ServiceName, opt => opt.MapFrom(src => src.FirstOrDefault().ServiceName))
.ForMember(dest => dest.Tax, opt => opt.MapFrom(src => src.Select(c => new TaxDto() { ServiceTypeId = c.ServiceTypeId, QuarterlyCharge = c.QuarterlyCharge, AnnualCharge = c.AnnualCharge })));
var mapper = config.CreateMapper();
var groupedServices = (new List<ServiceModel>
}).GroupBy(sm => sm.ServiceId);
var mappedService = mapper.Map<IEnumerable<IGrouping<string, ServiceModel>>, IEnumerable<ServiceResponseDto>>(groupedServices);
Console.WriteLine(JsonConvert.SerializeObject(mappedService, Formatting.Indented));
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 string ServiceTypeId { get; set; }
public double QuarterlyCharge { get; set; }
public double AnnualCharge { get; set; }