/// <summary>
        /// Cria um predicado para a lógica OR.
        /// </summary>
        /// <param name="lhsPred">Predicado da esquerda.</param>
        /// <param name="rhsPred">Predicado da direita.</param>
        /// <returns></returns>
        public static Predicate CreateLogicalOrPredicate(Predicate lhsPred, Predicate rhsPred)
        {
            if (lhsPred.Equals(TRUE_PREDICATE) || rhsPred.Equals(TRUE_PREDICATE))
            {
                return(TRUE_PREDICATE);
            }
            if (lhsPred.Equals(FALSE_PREDICATE))
            {
                return(rhsPred);
            }
            if (rhsPred.Equals(FALSE_PREDICATE))
            {
                return(lhsPred);
            }
            LogicalAndPredicate predicate = null;

            if (lhsPred is LogicalAndPredicate)
            {
                predicate = lhsPred as LogicalAndPredicate;
            }
            if ((predicate == null) || !predicate.Inverse)
            {
                predicate = new LogicalAndPredicate();
                predicate.Invert();
                predicate.Children.Add(lhsPred);
            }
            predicate.Children.Add(rhsPred);
            return(predicate);
        }
Example #2
0
 /// <summary>
 /// Compara com outra instancia.
 /// </summary>
 /// <param name="obj"></param>
 /// <returns></returns>
 public int CompareTo(object obj)
 {
     if (obj is LogicalAndPredicate)
     {
         LogicalAndPredicate predicate = (LogicalAndPredicate)obj;
         if ((base.Inverse == predicate.Inverse) && (_members.Count == predicate._members.Count))
         {
             for (int i = 0; i < _members.Count; i++)
             {
                 if (_members[i] != predicate._members[i])
                 {
                     return(-1);
                 }
             }
             return(0);
         }
     }
     return(-1);
 }