예제 #1
0
        public List <TransitCity> GetCitiesByLocation(string ticket, string country, string state, ServiceQueryOptions options)
        {
            using (SnCore.Data.Hibernate.Session.OpenConnection())
            {
                ISession session              = SnCore.Data.Hibernate.Session.Current;
                ManagedSecurityContext sec    = new ManagedSecurityContext(session, ticket);
                List <TransitCity>     result = new List <TransitCity>();

                if (string.IsNullOrEmpty(country))
                {
                    return(result);
                }

                Country t_country = ManagedCountry.Find(session, country);

                ICriteria cr = session.CreateCriteria(typeof(City))
                               .Add(Expression.Eq("Country.Id", t_country.Id));

                if (t_country.States != null && t_country.States.Count > 0 && string.IsNullOrEmpty(state))
                {
                    // no state specified but country has states
                    return(result);
                }

                if (!string.IsNullOrEmpty(state))
                {
                    // state specified
                    State t_state = ManagedState.Find(session, state, country);
                    cr.Add(Expression.Eq("State.Id", t_state.Id));
                }

                if (options != null)
                {
                    cr.SetFirstResult(options.FirstResult);
                    cr.SetMaxResults(options.PageSize);
                }

                return(WebServiceImpl <TransitCity, ManagedCity, City> .GetTransformedList(
                           session, sec, cr.List <City>()));
            }
        }