/// <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); }
/// <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); }