Ejemplo n.º 1
0
        private static IQueryable <AddressDetailItem> FilterAddresses(
            string persistentLocalId,
            DateTimeOffset?version,
            string houseNumber,
            string boxNumber,
            AdresStatus?status,
            string postalCode,
            IQueryable <AddressDetailItem> addresses,
            IQueryable <StreetNameBosaItem> streetNames)
        {
            var filtered = addresses.Join(streetNames,
                                          address => address.StreetNameId,
                                          streetName => streetName.StreetNameId,
                                          (address, street) => address);

            if (!string.IsNullOrEmpty(persistentLocalId))
            {
                if (int.TryParse(persistentLocalId, out var addressId))
                {
                    filtered = filtered.Where(x => x.PersistentLocalId == addressId);
                }
                else
                {
                    return(Enumerable.Empty <AddressDetailItem>().AsQueryable());
                }
            }

            if (!string.IsNullOrEmpty(houseNumber))
            {
                filtered = filtered.Where(x => x.HouseNumber.StartsWith(houseNumber));
            }

            if (!string.IsNullOrEmpty(boxNumber))
            {
                filtered = filtered.Where(x => x.BoxNumber.StartsWith(boxNumber));
            }

            if (status.HasValue)
            {
                var mappedStatus = AddressMapper.ConvertFromAdresStatus(status);
                filtered = filtered.Where(x => x.Status == mappedStatus);
            }

            if (!string.IsNullOrEmpty(postalCode))
            {
                filtered = filtered.Where(x => x.PostalCode == postalCode);
            }

            if (version.HasValue)
            {
                filtered = filtered.Where(x => x.VersionTimestampAsDateTimeOffset == version);
            }

            return(filtered);
        }