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>())); } }