public string[] GetCitiesCompletionList(string prefixText, int count, string contextKey) { // TODO: manufacture a guest ticket and run this through WebServiceImpl // country;state string[] context_parts = contextKey.Split(";,|".ToCharArray(), 2); if (context_parts.Length != 2) { return(null); } using (SnCore.Data.Hibernate.Session.OpenConnection()) { ISession session = SnCore.Data.Hibernate.Session.Current; int country_id = 0; if (!string.IsNullOrEmpty(context_parts[0])) { if (!ManagedCountry.TryGetCountryId(session, context_parts[0], out country_id)) { return(null); } } int state_id = 0; if (!string.IsNullOrEmpty(context_parts[1])) { if (!ManagedState.TryGetStateId(session, context_parts[1], context_parts[0], out state_id)) { return(null); } } ICriteria ic = session.CreateCriteria(typeof(City)) .Add(Expression.Like("Name", string.Format("{0}%", Renderer.SqlEncode(prefixText)))); if (country_id != 0) { ic.Add(Expression.Eq("Country.Id", country_id)); } if (state_id != 0) { ic.Add(Expression.Eq("State.Id", state_id)); } IList <City> nhs = ic.AddOrder(Order.Asc("Name")) .SetMaxResults(count) .List <City>(); List <string> result = new List <string>(nhs.Count); foreach (City nh in nhs) { result.Add(nh.Name); } return(result.ToArray()); } }