#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();
}