Посмотрите на AutoMapper .И я согласен с @duffymo, я бы не использовал интерфейсы с DTO.AutoMapper - это основанный на соглашении объект для отображения объектов, который создаст и заполнит ваши DTO для вас.Если ничего другого, это сэкономит вам много печатать.Я прошел через написание процедур преобразования в / из DTO со связанными опечатками.Хотел бы я найти AutoMapper немного раньше.В случае вашего примера (где я номинально сделал объект "from" типа Order):
public class Services : IServices
{
public IList<DTO> GetDTOs()
{
...
Mapper.CreateMap<Order, DTO>(); // move map creation to startup routine
var dtos = new List<DTO>();
foreach (c in d)
{
dtos.Add( Mapper.Map<Order, DTO>(c));
}
return dtos;
}
}
Или используя LINQ
public class Services : IServices
{
public IList<DTO> GetDTOs()
{
...
Mapper.CreateMap<Order, DTO>(); // move map creation to startup routine
return d.Select(c => Mapper.Map<Order, DTO>(c)).ToList();
}
}