Automapper отображает список плоских моделей на сложные объекты с внутренними списками - PullRequest
0 голосов
/ 04 марта 2020

У меня есть список плоских объектов, возвращаемых из запроса sql, типа:

public class Summary
{
    public int ApartmentId { get; set; }
    public int LoanId { get; set; }
    public int PaymentId { get; set; }

    public bool? RepaymentRequested { get; set; }
    public DateTime LoanStartDate { get; set; }
    public DateTime PaymentDate { get; set; }
}

Мне нужно Automap для группировки его в сложную структуру DTO

public class ApartmentSummaryDTO
{
    public int ApartmentId { get; set; }
    public bool? RepaymentRequested { get; set; }

    public IEnumerable<LoanSummaryDTO> LoanSummaries { get; set; }
}

public class LoanSummaryDTO
{
    public int LoanId { get; set; }
    public DateTime LoanStartDate { get; set; }

    public IEnumerable<PaymentSummaryDTO> PaymentSummaries { get; set; }
}

public class PaymentSummaryDTO
{
    public int PaymentId { get; set; }
    public DateTime PaymentDate { get; set; }
}

Я могу добиться этого, используя LINQ, например:

                return data.GroupBy(d => d.ApartmentId)
                .Select(group => new ApartmentSummaryDTO()
                {
                    ApartmentId = group.Key,
                    RepaymentRequested = group.FirstOrDefault()?.RepaymentRequested,
                    LoanSummaries = group.GroupBy(loanGroup => loanGroup.LoanId).Select(l => new LoanSummaryDTO()
                    {
                        LoanId = l.Key,
                        LoanStartDate = l.First().LoanStartDate,
                        PaymentSummaries = l.Select(p => new PaymentSummaryDTO() 
                        {
                            PaymentId = p.PaymentId,
                            PaymentDate = p.PaymentDate
                        })
                    })
                }).FirstOrDefault();

Но не могу понять, как создать конфигурацию с помощью автоматического преобразователя, чтобы получить тот же результат, что и LINQ.

...