public BasicParticipation[] GetExpiringParticipations(IHasIdentity organization, DateTime lowerBound,
                                                              DateTime upperBound, DatabaseCondition condition)
        {
            // Since I don't trust SQL Server to make correct date comparisons, especially given
            // that the dates are passed in text in SQL, we get ALL the memberships and do
            // the comparison in code instead. This is a run-seldom function, anyway, and getting
            // some 50k records with four short unlinked fields isn't that expensive.

            BasicParticipation[] participations = GetParticipations(organization, condition);

            DateTime minimumDateTime = lowerBound.Date;
            DateTime maximumDateTime = upperBound.Date.AddDays(1);

            List <BasicParticipation> result = new List <BasicParticipation>();

            foreach (BasicParticipation participation in participations)
            {
                // It is important that the lower border is inclusive and the upper exclusive in this
                // comparison:

                if (participation.Expires >= minimumDateTime && participation.Expires < maximumDateTime)
                {
                    result.Add(participation);
                }
            }

            return(result.ToArray());
        }
        public BasicMembership[] GetExpiringMemberships (IHasIdentity organization, DateTime lowerBound, DateTime upperBound, DatabaseCondition condition)
        {
            // Since I don't trust SQL Server to make correct date comparisons, especially given
            // that the dates are passed in text in SQL, we get ALL the memberships and do
            // the comparison in code instead. This is a run-seldom function, anyway, and getting
            // some 50k records with four short unlinked fields isn't that expensive.

            BasicMembership[] memberships = this.GetMemberships(organization, condition);

            DateTime minimumDateTime = lowerBound.Date;
            DateTime maximumDateTime = upperBound.Date.AddDays(1);

            List<BasicMembership> result = new List<BasicMembership>();

            foreach (BasicMembership membership in memberships)
            {
                // It is important that the lower border is inclusive and the upper exclusive in this
                // comparison:

                if (membership.Expires >= minimumDateTime && membership.Expires < maximumDateTime)
                {
                    result.Add(membership);
                }
            }

            return result.ToArray();
        }
 private static string GetWhereClauseForCondition (DatabaseCondition condition)
 {
     switch (condition)
     {
         case DatabaseCondition.OpenTrue:
             return "Open=1";
         case DatabaseCondition.OpenFalse:
             return "Open=0";
         case DatabaseCondition.AttestedFalse:
             return "Attested=0";
         case DatabaseCondition.AttestedTrue:
             return "Attested=1";
         case DatabaseCondition.ActiveFalse:
             return "Active=0";
         case DatabaseCondition.ActiveTrue:
             return "Active=1";
         default:
             throw new InvalidOperationException(
                 "Undefined or unimplemented DatabaseCondition in GetWhereClauseForCondition: " +
                 condition.ToString());
     }
 }