public IEnumerable<Match> GetMatchesAsync(string userid, string city, string minAge, string maxAge)
        {
            int minAgeInt = Convert.ToInt32(minAge);
            int maxAgeInt = Convert.ToInt32(maxAge);
            if (minAgeInt == 0) minAgeInt = 18;
            if (maxAgeInt == 0) maxAgeInt = 100;

            User user = auth.Authorize(WebOperationContext.Current.IncomingRequest);
            if (user.Id != Convert.ToInt32(userid)) throw new WebFaultException(System.Net.HttpStatusCode.Unauthorized);

            var guides = userDA.GetAll()
                .Where(
                u => u.Id != user.Id
                && u.City != null
                && u.City.Name.ToLower() == city.ToLower()
                && u.Age >= minAgeInt
                && u.Age <= maxAgeInt)
                .ToList();
            var matches = new Match[guides.Count];

            Parallel.For(0, guides.Count, index =>
            {
                matches[index] = provider.GetMatch(user, guides[index]);
            });

            var matchList = matches.OrderByDescending(m => m.Score).ToList();
            return matchList;
        }