Как выбрать из списка и сопоставить другой объект с помощью Automapper - PullRequest
0 голосов
/ 07 февраля 2019

Из вложенного списка Entity мы хотим выбрать объект и отобразить его в объекте Dto, но когда мы используем Automapper для фильтрации объекта, который deleteDate равен null и сопоставим его, для каждого столбца фильтр Automapper снова включаетсядб.Как отфильтровать один раз и сопоставить выбранный объект Dto

Нам нужно сохранить всю информацию в нашей базе данных, поэтому используйте столбец DeleteDate со значением по умолчанию null.поэтому мы используем отношение один ко многим для хранения истории наших данных.

public class User
{
    public Guid UserId { get; set; }

    public string MobileNumber { get; set; }

    public string Email { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public IList<CustomerDetail> CustomerDetails { get; set; }
}




public class CustomerDetail
{
    public Guid CustomerDetailId { get; set; }

    public float MaximumAmountPerTransaction { get; set; }

    public float MaximumAmountPerDay { get; set; }

    public bool IsConfirm { get; set; }

    public Guid UserId { get; set; }

    public virtual DateTimeOffset CreateDate { get; set; }

    public virtual DateTimeOffset? DeleteDate { get; set; }
}




public class CustomerResponse
{
    [Key]
    public Guid CustomerId{ get; set; }

    public string MobileNumber{ get; set; }

    public string Email { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public bool IsConfirm { get; set; }

    public float? MaximumAmountPerTransaction { get; set; }

    public float? MaximumAmountPerDay { get; set; }
}



public class CustomerDomainProfile : Profile
{
    public UserDomainProfile()
    {
        CreateMap<User, CustomerResponse>()
            .ForMember(dest => dest.CustomerId,
                opt => opt.MapFrom(src => src.UserId))
            .ForMember(dest => dest.Country,
                opt => opt.MapFrom(src => src.Country.CommonName))
            .ForMember(dest => dest.IsConfirm,
                opt => opt.MapFrom(src =>      src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate ==  null).IsConfirm))
            .ForMember(dest => dest.MaximumAmountPerTransaction,
                opt => opt.MapFrom(src => src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate == null).MaximumAmountPerTransaction))
            .ForMember(dest => dest.MaximumAmountPerDay,
                opt => opt.MapFrom(src => src.CustomerDetails.FirstOrDefault(cd => cd.DeleteDate == null).MaximumAmountPerDay))
    }
}

Я ожидаю запрос к базе данных и выбираю CustomerDetails с DeleteDate, равным нулю, и сопоставляем его, но тип нашего определения, длякаждый столбец пытается выполнить запрос к базе данных, потому что

Я ожидаю, что запрос к базе данных и выбор CustomerDetails с DeleteDate равен null и его карте, но наше определение для каждого столбца пытается выполнить запрос к базе данных, потому что это можетне признать, что они из одной таблицы.Как мы можем идентифицировать их, выпавших из ряда, чтобы уменьшить запрос?есть другое решение или идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...