/// <summary> /// Найти объекты недвижимости. /// </summary> /// <param name="options">Параметры поиска.</param> /// <returns>Найденные объекты недвижимости.</returns> public IEnumerable <IRealtyObject> FindByParams( RealtyObjectSearchOptions options) { if (options == null) { return(this.GetAll()); } RealtyObjectsFinder finder = new RealtyObjectsFinder( options, this.Context.RealtyObjects); ICollection <RealtyObject> rawResult = finder.Find(); return(rawResult.Select(robj => new RealtyObjectWrap(robj, this.Context))); }
/// <summary> /// Создать экземпляр класса поиска объектов недвижимости. /// </summary> /// <param name="options">Параметры поиска.</param> /// <param name="initialQuery">Исходный запрос /// (например, все объекты).</param> internal RealtyObjectsFinder( RealtyObjectSearchOptions options, IQueryable <RealtyObject> initialQuery) { if (options == null) { throw new ArgumentNullException("options"); } if (initialQuery == null) { throw new ArgumentNullException("initialQuery"); } if (string.IsNullOrWhiteSpace(options.RealtyObjectType)) { throw new InvalidOperationException( "В параметрах поиска не указан тип объектов."); } this.options = options; this.initialQuery = initialQuery; }
/// <summary> /// Метод обработки запроса GET с параметрами поиска. /// </summary> /// <param name="minCost">Минимальная стоимость.</param> /// <param name="maxCost">Максимальная стоимость.</param> /// <param name="partOfAddress">Часть адреса.</param> /// <param name="realtyObjectType">Имя типа объектов недвижимости.</param> /// <param name="minDate">Минимальная дата.</param> /// <param name="maxDate">Максимальная дата.</param> /// <returns>Объекты недвижимости, удовлетворяющие условиям поиска.</returns> /// <remarks>Пример запроса: #pragma warning disable 1570 /// GET api/v1/RealtyObjects?minCost=2&maxCost=35&partOfAddress=Ленина&realtyObjectType=Квартиры&minDate=5.11.16&maxDate=10.11.16</remarks> #pragma warning restore 1570 public IEnumerable <IRealtyObject> Get( int minCost, int maxCost, string partOfAddress, string realtyObjectType, DateTime minDate, DateTime maxDate) { this.AuthorizeUserToReadData( RealtyObjectsController.DontHaveRightsToRead); RealtyObjectSearchOptions options = new RealtyObjectSearchOptions() { MinCost = minCost, MaxCost = maxCost, PartOfAddress = partOfAddress, RealtyObjectType = realtyObjectType, MinDate = minDate, MaxDate = maxDate }; return(this.realtyObjects.FindByParams(options)); }