private static bool MatchPredicate(PackageItem package, BinaryPredicate predicate) { var expr1 = predicate.Operand1 as Expression; switch (predicate.Operator) { case Operator.Or: return Match(package, predicate.Operand1) || Match(package, predicate.Operand2); case Operator.And: return Match(package, predicate.Operand1) && Match(package, predicate.Operand2); case Operator.Equal: case Operator.NotEqual: case Operator.GreaterThan: case Operator.LessThan: case Operator.GreaterThanOrEqual: case Operator.LessThanOrEqual: if (expr1 != null) { switch (expr1.Value) { case "version": return MatchVersion(package, predicate); } } break; } return true; }
private static bool MatchVersion(PackageItem package, BinaryPredicate predicate) { var expr2 = predicate.Operand2 as Expression; if (expr2 != null) { try { switch (predicate.Operator) { case Operator.Equal: return AsVersion(package.PackageIdentity.Version) == AsVersion(expr2.Value); case Operator.NotEqual: return AsVersion(package.PackageIdentity.Version) != AsVersion(expr2.Value); case Operator.GreaterThan: return AsVersion(package.PackageIdentity.Version) > AsVersion(expr2.Value); case Operator.LessThan: return AsVersion(package.PackageIdentity.Version) < AsVersion(expr2.Value); case Operator.GreaterThanOrEqual: return AsVersion(package.PackageIdentity.Version) >= AsVersion(expr2.Value); case Operator.LessThanOrEqual: return AsVersion(package.PackageIdentity.Version) <= AsVersion(expr2.Value); } } catch (Exception e) { Console.WriteLine(e); } } return true; }