I have the following method that works but always returns excessively large result sets. We have around 38,000 user objects in AD and based on queries of PwdLastSet many of the entries returned by this method clearly don't expire. Thoughts?

        public static List getExpiringPasswordEntries(int days)
        {
            MethodBase mbo = System.Reflection.MethodBase.GetCurrentMethod();
            Debug.WriteLine(mbo.Name + ": Entering");

            List returnList = new List();
            DateTime dt = DateTime.Today.AddDays(days);

            Debug.Print(mbo.Name + ": dt val " + dt.ToString());
            Debug.Print(mbo.Name + ": getting list of passwords that expire in " + days + " days");

            try
            {
                PrincipalContext adPrincipalContext = new PrincipalContext(ContextType.Domain, "gsb.uchicago.edu");
                PrincipalSearchResult results =
                    UserPrincipal.FindByPasswordSetTime(
                    adPrincipalContext,
                    dt,
                    MatchType.LessThanOrEquals);

                foreach (UserPrincipal result in results)
                {
                    returnList.Add(result.SamAccountName);
                    //Debug.WriteLine(mbo.Name + ": " + result.SamAccountName);
                }

                Debug.WriteLine(mbo.Name + ": Returning");
                return returnList;
            }
            catch
            {
                throw;
            }

        }