示例#1
0
        internal AdSearchResultModel AdvancedSearchAds(AdvancedAdSearchModel searchQuery)
        {
            // This search relies on a selected category
            Category selectedCategory = _repository.Get <Category>(searchQuery.CategorySelectedId);

            // create search parameters object from AdvancedAdSearchModel
            AdSearchParameters searchParameters = CreateSearchParameters(searchQuery);

            // call repo with Type T based on switch on category with parameters (same for all objects)
            IList <SearchAdCache> searchResult = new List <SearchAdCache>();

            switch (selectedCategory.Type)
            {
            case AdTypeEnum.CarAd:
                searchResult = _searchRepository.AdvancedSearchAds <CarAd>(searchParameters);
                break;

            case AdTypeEnum.OtherVehiculeAd:
                searchResult = _searchRepository.AdvancedSearchAds <OtherVehicleAd>(searchParameters);
                break;

            case AdTypeEnum.MotoAd:
                searchResult = _searchRepository.AdvancedSearchAds <MotoAd>(searchParameters);
                break;

            case AdTypeEnum.RealEstateAd:
                searchResult = _searchRepository.AdvancedSearchAds <RealEstateAd>(searchParameters);
                break;

            case AdTypeEnum.MotorBoatAd:
                searchResult = _searchRepository.AdvancedSearchAds <MotorBoatAd>(searchParameters);
                break;

            case AdTypeEnum.SailingBoatAd:
                searchResult = _searchRepository.AdvancedSearchAds <SailingBoatAd>(searchParameters);
                break;

            case AdTypeEnum.MotorBoatEngineAd:
                searchResult = _searchRepository.AdvancedSearchAds <MotorBoatEngineAd>(searchParameters);
                break;

            case AdTypeEnum.WaterSportAd:
                searchResult = _searchRepository.AdvancedSearchAds <WaterSportAd>(searchParameters);
                break;

            case AdTypeEnum.Ad:
                searchResult = _searchRepository.AdvancedSearchAds <Ad>(searchParameters);
                break;
            }

            // Create models for search results
            AdSearchResultModel model = new AdSearchResultModel(searchQuery);

            model.SearchResultTotalCount = searchResult.Count;
            model.SearchResult           = searchResult.Select(a => new AdSearchResultItemModel(a)).ToList();

            return(model);
        }
示例#2
0
        public IList <SearchAdCache> AdvancedSearchAds <T>(AdSearchParameters parameters) where T : BaseAd
        {
            ICriteria query = createRootCriteria(parameters.AndSearchStrings, parameters.CityId, parameters.CategoryIds);

            DetachedCriteria crit = creatDetachedCriteria <T>(parameters);

            query.Add(Subqueries.PropertyIn("AdId", crit));

            return(query.List <SearchAdCache>());
        }
示例#3
0
        private AdSearchParameters CreateSearchParameters(AdvancedAdSearchModel searchQuery)
        {
            AdSearchParameters parameters = new AdSearchParameters();

            if (!String.IsNullOrEmpty(searchQuery.SearchString))
            {
                parameters.AndSearchStrings = searchQuery.SearchString.Trim().Split(' ');
            }

            parameters.CategoryIds = GetCategoryIdsFromQuery(searchQuery.CategorySelectedId);
            parameters.CityId      = searchQuery.CitySelectedId;

            parameters.MinPrice = searchQuery.MinPrice;
            parameters.MaxPrice = searchQuery.MaxPrice;

            // -- Vehicles specific properties -- //
            if (searchQuery.AgeBracketSelectedId.HasValue)
            {
                parameters.MaxYear = _referenceServices.GetAllAgeBrackets()[searchQuery.AgeBracketSelectedId.Value].LowValue;
                parameters.MaxYear = _helperService.GetCurrentDateTime().Year - parameters.MaxYear;
                parameters.MinYear = _referenceServices.GetAllAgeBrackets()[searchQuery.AgeBracketSelectedId.Value].HighValue;
                parameters.MinYear = _helperService.GetCurrentDateTime().Year - parameters.MinYear;
            }

            if (searchQuery.KmBracketSelectedId.HasValue)
            {
                parameters.MinKm = _referenceServices.GetAllKmBrackets()[searchQuery.KmBracketSelectedId.Value].LowValue;
                parameters.MaxKm = _referenceServices.GetAllKmBrackets()[searchQuery.KmBracketSelectedId.Value].HighValue;
            }

            if (searchQuery.EngineSizeBracketSelectedId.HasValue)
            {
                parameters.MinEngineSize = _referenceServices.GetAllEngineSizeBrackets()[searchQuery.EngineSizeBracketSelectedId.Value].LowValue;
                parameters.MaxEngineSize = _referenceServices.GetAllEngineSizeBrackets()[searchQuery.EngineSizeBracketSelectedId.Value].HighValue;
            }

            parameters.BrandId = searchQuery.BrandSelectedId;
            parameters.FueldId = searchQuery.FuelSelectedId;
            parameters.IsAuto  = searchQuery.IsAutomatic;

            //-- Real Estate specific properties --//
            parameters.RealEstateTypeId = searchQuery.SelectedRealEstateTypeId;
            parameters.DistrictId       = searchQuery.SelectedDistrictId;
            parameters.IsFurnished      = searchQuery.IsFurnished;
            if (searchQuery.NbRoomsBracketSelectedId.HasValue)
            {
                parameters.MinNbRooms = _referenceServices.GetAllRealEstateNbRoomsBrackets()[searchQuery.NbRoomsBracketSelectedId.Value].LowValue;
                parameters.MaxNbRooms = _referenceServices.GetAllRealEstateNbRoomsBrackets()[searchQuery.NbRoomsBracketSelectedId.Value].HighValue;
            }
            if (searchQuery.SurfaceAreaBracketSelectedId.HasValue)
            {
                parameters.MinSurfaceArea = _referenceServices.GetAllSurfaceAreaBrackets()[searchQuery.SurfaceAreaBracketSelectedId.Value].LowValue;
                parameters.MaxSurfaceArea = _referenceServices.GetAllSurfaceAreaBrackets()[searchQuery.SurfaceAreaBracketSelectedId.Value].HighValue;
            }

            //-- Water sport specific properties --//
            parameters.MotorBoatTypeId   = searchQuery.SelectedMotorBoatTypeId;
            parameters.MotorEngineTypeId = searchQuery.SelectedMotorTypeId;
            parameters.SailingBoatTypeId = searchQuery.SelectedSailingBoatTypeId;
            parameters.HullTypeId        = searchQuery.SelectedHullTypeId;
            parameters.WaterTypeId       = searchQuery.SelectedWaterTypeId;
            parameters.MinLength         = searchQuery.MinLength;
            parameters.MaxLength         = searchQuery.MaxLength;
            parameters.MinHp             = searchQuery.MinHp;
            parameters.MaxHp             = searchQuery.MaxHp;

            return(parameters);
        }
示例#4
0
        public void AdvancedSearchAds_MotorBoatAd_MotorBoatProperties_ReturnMotorBoatAd()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Bateau à moteur",
                    LabelUrlPart = "Bateau"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "bateau",
                    Body         = "la desc du bateau",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                MotorBoatType mbt = new MotorBoatType()
                {
                    Id    = 5,
                    Label = "Bois"
                };

                MotorBoatEngineType mt = new MotorBoatEngineType()
                {
                    Id    = 7,
                    Label = "4 temps"
                };

                MotorBoatAd bat = new MotorBoatAd
                {
                    Id            = 1,
                    Title         = "bateau",
                    Body          = "la desc du bateau",
                    City          = c,
                    CreationDate  = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category      = cat,
                    CreatedBy     = u,
                    Price         = 1000,
                    Hp            = 100,
                    Length        = 6,
                    MotorBoatType = mbt,
                    MotorType     = mt,
                    Year          = 2005
                };

                repo.Save(mbt);
                repo.Save(mt);
                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(bat);
                repo.Save(a);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    MotorBoatTypeId   = 1,
                    MotorEngineTypeId = 1,
                    MinHp             = 99,
                    MaxHp             = 100,
                    MinLength         = 6,
                    MaxLength         = 10,
                    MinYear           = 2004,
                    MaxYear           = 2006
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <MotorBoatAd>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a, result[0]);
            }
        }
示例#5
0
        public void AdvancedSearchAds_Ad_MinMaxPrice_ReturnMatchingAds()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Location",
                    LabelUrlPart = "Location"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "chaussure",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                Ad loc = new Ad
                {
                    Id           = 1,
                    Title        = "chaussure",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u,
                    Price        = 1000
                };

                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(loc);
                repo.Save(a);

                SearchAdCache a2 = new SearchAdCache
                {
                    AdId         = 2,
                    Title        = "chaussure",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                Ad loc2 = new Ad
                {
                    Id           = 2,
                    Title        = "chaussure",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u,
                    Price        = 2000
                };
                repo.Save(loc2);
                repo.Save(a2);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    MinPrice = 0,
                    MaxPrice = 1000
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <Ad>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a, result[0]);
            }
        }
示例#6
0
        public void AdvancedSearchAds_RealEstateAds_RealEstateProperties_ReturnRealEstateAd()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Location",
                    LabelUrlPart = "Location"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "appart",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                RealEstateType t1 = new RealEstateType
                {
                    Label = "Location"
                };

                District d = new District
                {
                    City  = c,
                    Label = "Cheznous"
                };

                RealEstateAd loc = new RealEstateAd
                {
                    Id           = 1,
                    Title        = "appart",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u,
                    Type         = t1,
                    District     = d,
                    RoomsNumber  = 5,
                    IsFurnished  = true,
                    SurfaceArea  = 45
                };

                repo.Save(t1);
                repo.Save(d);
                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(loc);
                repo.Save(a);

                MotoBrand brand = new MotoBrand
                {
                    Label = "Suzuki"
                };

                SearchAdCache a2 = new SearchAdCache
                {
                    AdId         = 2,
                    Title        = "appart2",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                RealEstateAd loc2 = new RealEstateAd
                {
                    Id           = 2,
                    Title        = "appart2",
                    Body         = "boite a chaussure",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u,
                    Type         = t1,
                    District     = d,
                    RoomsNumber  = 4,
                    IsFurnished  = true,
                    SurfaceArea  = 65
                };
                repo.Save(loc2);
                repo.Save(a2);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    AndSearchStrings = new String[] { "appart" },
                    MinNbRooms       = 2,
                    MaxNbRooms       = 4,
                    DistrictId       = 1,
                    RealEstateTypeId = 1,
                    IsFurnished      = true,
                    MinSurfaceArea   = 60,
                    MaxSurfaceArea   = 65
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <RealEstateAd>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a2, result[0]);
            }
        }
示例#7
0
        public void AdvancedSearchAds_MotoAds_MotoProperties_ReturnMotoAd()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Auto",
                    LabelUrlPart = "Auto"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                CarAd car = new CarAd
                {
                    Id           = 1,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u
                };

                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(car);
                repo.Save(a);

                Category cat2 = new Category
                {
                    Label        = "Moto",
                    LabelUrlPart = "Moto"
                };

                MotoBrand brand = new MotoBrand
                {
                    Label = "Suzuki"
                };

                SearchAdCache a2 = new SearchAdCache
                {
                    AdId         = 2,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat2
                };

                MotoAd moto = new MotoAd
                {
                    Id           = 2,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat2,
                    Brand        = brand,
                    EngineSize   = 650,
                    CreatedBy    = u
                };
                repo.Save(brand);
                repo.Save(cat2);
                repo.Save(moto);
                repo.Save(a2);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    AndSearchStrings = new String[] { "aveo" },
                    BrandId          = brand.Id,
                    MinEngineSize    = 250,
                    MaxEngineSize    = 800
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <MotoAd>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a2, result[0]);
            }
        }
示例#8
0
        public void AdvancedSearchAds_CarAds_CarProperties_ReturnCarAd()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Auto",
                    LabelUrlPart = "Auto"
                };

                CarFuel fuel = new CarFuel
                {
                    Label = "Diesel"
                };

                VehicleBrand brand = new VehicleBrand
                {
                    Label = "Aveo"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                CarAd car = new CarAd
                {
                    Id           = 1,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    Year         = 2011,
                    Kilometers   = 10000,
                    IsAutomatic  = true,
                    Fuel         = fuel,
                    Brand        = brand,
                    CreatedBy    = u
                };

                repo.Save(brand);
                repo.Save(fuel);
                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(car);
                repo.Save(a);

                SearchAdCache a2 = new SearchAdCache
                {
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                CarAd car2 = new CarAd
                {
                    Id           = 1,
                    Title        = "aveo",
                    Body         = "aveo sport 1.2 16s",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    Year         = 2001,
                    Kilometers   = 95000,
                    Brand        = brand,
                    CreatedBy    = u
                };
                repo.Save(car2);
                repo.Save(a2);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    AndSearchStrings = new String[] { "aveo" },
                    MinKm            = 0,
                    MaxKm            = 11000,
                    MinYear          = 2000,
                    MaxYear          = 2012,
                    BrandId          = brand.Id,
                    FueldId          = fuel.Id,
                    IsAuto           = true
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <CarAd>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a, result[0]);
            }
        }
示例#9
0
        public void AdvancedSearchAds_WaterSportAd_WaterSportProperties_ReturnWaterSportAd()
        {
            ISessionFactory  sessionFactory = NhibernateHelper.SessionFactory;
            Repository       repo           = new Repository(sessionFactory);
            SearchRepository adRepo         = new SearchRepository(sessionFactory);

            using (ITransaction transaction = sessionFactory.GetCurrentSession().BeginTransaction())
            {
                // Given
                #region test data
                Province p1 = new Province
                {
                    Label = "p1"
                };

                User u = new User
                {
                    Email    = "*****@*****.**",
                    Password = "******"
                };
                repo.Save <User>(u);

                City c = new City
                {
                    Label        = "city",
                    LabelUrlPart = "city"
                };
                p1.AddCity(c);

                Category cat = new Category
                {
                    Label        = "Bateau à moteur",
                    LabelUrlPart = "Bateau"
                };

                SearchAdCache a = new SearchAdCache
                {
                    AdId         = 1,
                    Title        = "bateau",
                    Body         = "la desc du bateau",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat
                };

                WaterSportType st = new WaterSportType()
                {
                    Label = "pmt"
                };

                WaterSportAd bat = new WaterSportAd
                {
                    Id           = 1,
                    Title        = "bateau",
                    Body         = "la desc du bateau",
                    City         = c,
                    CreationDate = new DateTime(2012, 01, 16, 23, 52, 18),
                    Category     = cat,
                    CreatedBy    = u,
                    Type         = st
                };

                repo.Save(st);
                repo.Save(p1);
                repo.Save(c);
                repo.Save(cat);
                repo.Save(u);
                repo.Save(bat);
                repo.Save(a);

                repo.Flush();

                #endregion

                AdSearchParameters param = new AdSearchParameters
                {
                    WaterTypeId = 1
                };

                // When
                IList <SearchAdCache> result = adRepo.AdvancedSearchAds <WaterSportAd>(param);

                // Then
                Assert.AreEqual(1, result.Count);
                Assert.AreEqual(a, result[0]);
            }
        }
示例#10
0
        private DetachedCriteria creatDetachedCriteria <T>(AdSearchParameters parameters) where T : BaseAd
        {
            DetachedCriteria crit = DetachedCriteria.For <T>();

            if (parameters.MinPrice.HasValue)
            {
                crit.Add(Restrictions.Ge("Price", parameters.MinPrice.Value));
            }

            if (parameters.MaxPrice.HasValue)
            {
                crit.Add(Restrictions.Le("Price", parameters.MaxPrice.Value));
            }

            if (parameters.MinKm.HasValue)
            {
                crit.Add(Restrictions.Ge("Kilometers", parameters.MinKm.Value));
            }

            if (parameters.MaxKm.HasValue)
            {
                crit.Add(Restrictions.Le("Kilometers", parameters.MaxKm.Value));
            }

            if (parameters.MinYear.HasValue)
            {
                crit.Add(Restrictions.Ge("Year", parameters.MinYear.Value));
            }

            if (parameters.MaxYear.HasValue)
            {
                crit.Add(Restrictions.Le("Year", parameters.MaxYear.Value));
            }

            if (parameters.BrandId.HasValue)
            {
                crit.Add(Restrictions.Eq("Brand.Id", parameters.BrandId));
            }

            if (parameters.FueldId.HasValue)
            {
                crit.Add(Restrictions.Eq("Fuel.Id", parameters.FueldId));
            }

            if (parameters.IsAuto.HasValue)
            {
                crit.Add(Restrictions.Eq("IsAutomatic", parameters.IsAuto));
            }

            if (parameters.MinEngineSize.HasValue)
            {
                crit.Add(Restrictions.Ge("EngineSize", parameters.MinEngineSize));
            }

            if (parameters.MaxEngineSize.HasValue)
            {
                crit.Add(Restrictions.Le("EngineSize", parameters.MaxEngineSize));
            }

            if (parameters.MinNbRooms.HasValue)
            {
                crit.Add(Restrictions.Ge("RoomsNumber", parameters.MinNbRooms));
            }

            if (parameters.MaxNbRooms.HasValue)
            {
                crit.Add(Restrictions.Le("RoomsNumber", parameters.MaxNbRooms));
            }

            if (parameters.DistrictId.HasValue)
            {
                crit.Add(Restrictions.Eq("District.Id", parameters.DistrictId));
            }

            if (parameters.RealEstateTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("Type.Id", parameters.RealEstateTypeId));
            }

            if (parameters.IsFurnished.HasValue)
            {
                crit.Add(Restrictions.Eq("IsFurnished", parameters.IsFurnished));
            }

            if (parameters.MinSurfaceArea.HasValue)
            {
                crit.Add(Restrictions.Ge("SurfaceArea", parameters.MinSurfaceArea));
            }

            if (parameters.MaxSurfaceArea.HasValue)
            {
                crit.Add(Restrictions.Le("SurfaceArea", parameters.MaxSurfaceArea));
            }

            if (parameters.MotorBoatTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("MotorBoatType.Id", parameters.MotorBoatTypeId));
            }

            if (parameters.MotorEngineTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("MotorType.Id", parameters.MotorEngineTypeId));
            }

            if (parameters.MinLength.HasValue)
            {
                crit.Add(Restrictions.Ge("Length", parameters.MinLength));
            }

            if (parameters.MaxLength.HasValue)
            {
                crit.Add(Restrictions.Le("Length", parameters.MaxLength));
            }

            if (parameters.MinHp.HasValue)
            {
                crit.Add(Restrictions.Ge("Hp", parameters.MinHp));
            }

            if (parameters.MaxHp.HasValue)
            {
                crit.Add(Restrictions.Le("Hp", parameters.MaxHp));
            }

            if (parameters.SailingBoatTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("SailingBoatType.Id", parameters.SailingBoatTypeId));
            }

            if (parameters.HullTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("HullType.Id", parameters.HullTypeId));
            }

            if (parameters.WaterTypeId.HasValue)
            {
                crit.Add(Restrictions.Eq("Type.Id", parameters.WaterTypeId));
            }

            crit.SetProjection(Projections.Property("Id"));

            return(crit);
        }