Значение фильтра для связанной сущности (ядро asp.net) - PullRequest
1 голос
/ 11 апреля 2019

У меня есть таблица свойств, связанных с коллекцией Адреса

Вот модель

 [Table("PM101Properties")]
    public class Property: FullAuditedEntity, IMustHaveTenant
    {        
        [Required]
        public virtual Status Status { get; set; }
        public virtual int TenantId { get; set; }
        public virtual int? LandlordId { get; set; }
        public virtual int? AgentId { get; set; }
        public virtual int PropertyTitleId { get; set; }
        public virtual int BuildingTypeId { get; set; }
        public virtual int PropertyTypeId { get; set; }
        [ForeignKey("LandlordId")]
        public virtual Landlord Landlord { get; set; }
        [ForeignKey("AgentId")]
        public virtual Agent Agent { get; set; }
        [ForeignKey("PropertyTitleId")]
        public virtual PropertyTitle PropertyTitle { get; set; }
        [ForeignKey("BuildingTypeId")]
        public virtual BuildingType BuildingType { get; set; }
        [ForeignKey("PropertyTypeId")]
        public virtual PropertyType PropertyType { get; set; }

        public virtual ICollection<PropertyAddress> Addresses { get; set; }
        public virtual ICollection<PM101Site> Sites { get; set; }
        public virtual ICollection<PropertyAsset> PropertyAssets { get; set; }
    }

Я пытаюсь создать метод фильтра для адресов (у меня есть свойство типа PostCode, Town и т. Д. В объекте Adresses) и еще несколько полей

Вот мой метод для этого

 public async Task<PagedResultDto<PropertyDto>> GetProperties(GetPropertyInput input)
    {
        var query = _propertyRepository.GetAll()
            .Include(x => x.Addresses)
            .Include(x => x.BuildingType)
            .Include(x=> x.PropertyType)
            .Include(x=> x.PropertyTitle)
            .Include(x=> x.Agent)
            .Include(x=> x.Landlord)
            .Include(x=> x.Sites)
            .WhereIf(!input.Filter.IsNullOrWhiteSpace(),
                p => p.PropertyTitle.Name.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase) ||
                     p.PropertyType.Name.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase) ||
                     p.Landlord.Name.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase)||
                     p.Agent.Name.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase)||
            );
        var propertyCount = await query.CountAsync();
        var properties = await query.OrderBy(input.Sorting).PageBy(input).ToListAsync();

        return new PagedResultDto<PropertyDto>(
            propertyCount,
            ObjectMapper.Map<List<PropertyDto>>(properties)
        );
    }

Все работает отлично, но я не могу получить, например, Addresses.PostCode, например

 p.Addresses.PostCode.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase)

Как я могу отфильтровать это свойство?

1 Ответ

2 голосов
/ 11 апреля 2019

PostCode является свойством PropertyAddress, к которому вы не можете получить доступ непосредственно к коллекции адресов. Вы должны повторить бросить его.

p.Addresses.Any(a => a.PostCode.Contains(input.Filter.Trim(), StringComparison.OrdinalIgnoreCase)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...