Свяжите Dto с моделью и просто верните один Dto

#c# #linq

Вопрос:

Прежде всего, посмотрите на мой код: это ConceptDto :

 public Guid ConceptId { get; set; }
public string ConceptName { get; set; }
public string ConceptLatinName { get; set; }
public List<ConceptSubDto> ConceptSubSidiary { get; set;}
 

Это ConceptSubDto :

    public Guid ConceptSubId { get; set; }
   public string  ConceptSubName { get; set; }
 

и у меня есть такие домены.

Теперь это мой уровень приложения, в котором есть логика, я хочу получить их по идентификатору и вернуть только один ConceptDto , но я понятия не имею, нужно ли сопоставлять эти dto с моделями домена:

  public async Task<ConceptManagementDto> GetConceptById(Guid id)
 {
     var concept = await _conceptManagementRepository.Query()
                              .Include(x => x.conceptSubSidiaries)
                              .GetOneAsync(x => x.Id == id);
     return new ConceptManagementDto
            {
                ConceptManagementId = concept.Id,
                ConceptName = concept.ConceptName,
                ConceptLatinName = concept.ConceptLatinName,
                ConceptSubSidiary = ??
            };
}
 

Ответ №1:

Этот запрос должен быть эффективным, если в вашем DTO меньше полей:

 public async Task<ConceptManagementDto> GetConceptById(Guid id)
{
     return await _conceptManagementRepository.Query()
        .Where(x => x.Id == id)
        .Select(x = new ConceptManagementDto
        {
            ConceptManagementId = x.Id,
            ConceptName = x.ConceptName,
            ConceptLatinName = x.ConceptLatinName,
            ConceptSubSidiary = x.ConceptSubSidiaries
                .Select(sub => new ConceptSubDto
                {
                    ConceptSubId = sub.ConceptSubId,
                    ConceptSubName = sub.ConceptSubName
                })
                .ToList()
        }).First();
}