在ABP中的多表联动查询的实现
我们正在更改PersonAppService.GetPeople方法,将联系人的电话号码包含在返回值中。
首先,我们将PersonListD更改为包含电话列表:
public class PersonListDto : FullAuditedEntityDto
{
public string Name { get; set; }
public string Surname { get; set; }
public string EmailAddress { get; set; }
public List<PhoneInPersonListDto> Phones { get; set; }
}
/// <summary>
/// 电话在联系人信息中的dto
/// </summary>
public class PhoneInPersonListDto : FullAuditedEntity<long>
{
public PhoneType Type { get; set; }
public string Number { get; set; }
}
然后,在AutoMapper的配置中添加PhoneInPersonListDto到CustomerAppDtoMapper.cs中,如下所示:
configuration.CreateMap<Phone, PhoneInPersonListDto>();
这是通过增加的Dto类PhoneInPersonListDto.cs以传输从实体Phone类中的信息。现在,我们可以更改GetPeople方法,让它支持从数据库获取Phones的信息:
public ListResultDto<PersonListDto> GetPeople(GetPeopleInput input)
{
var people = _personRepository
.GetAll()
.Include(p => p.Phones)
.WhereIf(
!input.Filter.IsNullOrEmpty(),
p => p.Name.Contains(input.Filter) ||
p.Address.Contains(input.Filter) ||
p.EmailAddress.Contains(input.Filter)
)
.OrderBy(p => p.Name)
.ThenBy(p => p.Address)
.ToList();
return new ListResultDto<PersonListDto>(ObjectMapper.Map<List<PersonListDto>>(people));
}
我们只向查询添加了Include扩展方法。其余代码保持不变,即可获取到电话号码信息。