在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扩展方法。其余代码保持不变,即可获取到电话号码信息。

接下来