public NSPredicateEditorRowTemplate( IEnumerable<string> leftExpressionsFromKeyPaths, IEnumerable<string> rightExpressionsFromConstants, IEnumerable<NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this(leftExpressionsFromKeyPaths.Select (k => NSExpression.FromKeyPath (k)), rightExpressionsFromConstants.Select (k => NSExpression.FromConstant (new NSString (k))), operators, modifier, options) { }
public NSPredicateEditorRowTemplate( string leftExpressionFromKeyPath, IEnumerable<string> rightExpressionsFromConstants, IEnumerable<NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this(new [] { leftExpressionFromKeyPath }, rightExpressionsFromConstants, operators, modifier, options) { }
public NSPredicateEditorRowTemplate( IEnumerable<NSExpression> leftExpressions, IEnumerable<NSExpression> rightExpressions, IEnumerable<NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this(leftExpressions.ToArray (), rightExpressions.ToArray (), modifier, operators.Select (o => NSNumber.FromUInt32 ((uint)o)).ToArray (), options) { }
public NSPredicateEditorRowTemplate( IEnumerable <NSExpression> leftExpressions, NSAttributeType attributeType, IEnumerable <NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this( leftExpressions.ToArray(), attributeType, modifier, operators.Select(o => NSNumber.FromUInt32((uint)o)).ToArray(), options) { }
public NSPredicateEditorRowTemplate( string leftExpressionFromKeyPath, IEnumerable <string> rightExpressionsFromConstants, IEnumerable <NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this( new [] { leftExpressionFromKeyPath }, rightExpressionsFromConstants, operators, modifier, options) { }
public NSPredicateEditorRowTemplate( IEnumerable <string> leftExpressionsFromKeyPaths, IEnumerable <string> rightExpressionsFromConstants, IEnumerable <NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this( leftExpressionsFromKeyPaths.Select(k => NSExpression.FromKeyPath(k)), rightExpressionsFromConstants.Select(k => NSExpression.FromConstant(new NSString(k))), operators, modifier, options) { }
public NSPredicateEditorRowTemplate( string leftExpressionFromKeyPath, NSAttributeType attributeType, IEnumerable <NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this( new [] { leftExpressionFromKeyPath }, attributeType, operators, modifier, options) { }
public NSPredicateEditorRowTemplate( IEnumerable <string> leftExpressionsFromKeyPaths, NSAttributeType attributeType, IEnumerable <NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this( leftExpressionsFromKeyPaths.Select(k => NSExpression.FromKeyPath(k)), attributeType, operators, modifier, options) { }
public NSPredicateEditorRowTemplate( string leftExpressionFromKeyPath, NSAttributeType attributeType, IEnumerable<NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this(new [] { leftExpressionFromKeyPath }, attributeType, operators, modifier, options) { }
public NSPredicateEditorRowTemplate( IEnumerable<string> leftExpressionsFromKeyPaths, NSAttributeType attributeType, IEnumerable<NSPredicateOperatorType> operators, NSComparisonPredicateModifier modifier = NSComparisonPredicateModifier.Direct, NSComparisonPredicateOptions options = NSComparisonPredicateOptions.None) : this(leftExpressionsFromKeyPaths.Select (k => NSExpression.FromKeyPath (k)), attributeType, operators, modifier, options) { }
static NSPredicate ToPredicate(NSObject @object) { if (@object == NSNumber.FromBoolean(true)) { return(NSPredicate.FromValue(true)); } if (@object == NSNumber.FromBoolean(false)) { return(NSPredicate.FromValue(false)); } if (@object is NSArray == false) { return(null); } var array = (NSArray)@object; var objects = SubArray(array); var op = objects[0].ToString(); if (MGLPredicateOperatorTypesByJSONOperator.TryGetValue(op, out var operatorType)) { NSComparisonPredicateOptions options = 0; if (objects.Count > 3) { var collatorExpression = SubArray((NSArray)objects[3]); if (collatorExpression.Count != 2) { return(null); } var collator = (NSDictionary)collatorExpression[1]; if (false == collator.ContainsKey((NSString)"locale")) { if (collator.ValueForKey((NSString)"case-sensitive") == NSNumber.FromBoolean(false)) { options |= NSComparisonPredicateOptions.CaseInsensitive; } if (collator.ValueForKey((NSString)"diacritic-sensitive") == NSNumber.FromBoolean(false)) { options |= NSComparisonPredicateOptions.DiacriticInsensitive; } } } var subexpressions = ToSubexpressions(SubArray(objects, 1)); return(new NSComparisonPredicate( subexpressions[0], subexpressions[1], NSComparisonPredicateModifier.Direct, operatorType, options )); } switch (op) { case "!": { var subpredicates = ToSubpredicates(SubArray(objects, 1)); if (subpredicates.Count > 1) { var predicate = NSCompoundPredicate.CreateOrPredicate(subpredicates.ToArray()); return(NSCompoundPredicate.CreateNotPredicate(predicate)); } return(NSPredicate.FromValue(true)); } case "all": { var subpredicates = ToSubpredicates(SubArray(objects, 1)); if (subpredicates.Count == 2) { if (subpredicates[0] is NSComparisonPredicate leftCondition && subpredicates[1] is NSComparisonPredicate rightCondition ) { NSExpression[] limits = null; NSExpression leftConditionExpression = null; if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo && rightCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo ) { limits = new NSExpression[] { leftCondition.RightExpression, rightCondition.RightExpression }; leftConditionExpression = leftCondition.LeftExpression; } else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo && rightCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo ) { limits = new NSExpression[] { leftCondition.LeftExpression, rightCondition.RightExpression }; leftConditionExpression = leftCondition.RightExpression; } else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.LessThanOrEqualTo && rightCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo ) { limits = new NSExpression[] { leftCondition.LeftExpression, rightCondition.LeftExpression }; leftConditionExpression = leftCondition.RightExpression; } else if (leftCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo && rightCondition.PredicateOperatorType == NSPredicateOperatorType.GreaterThanOrEqualTo ) { limits = new NSExpression[] { leftCondition.RightExpression, rightCondition.LeftExpression }; leftConditionExpression = leftCondition.LeftExpression; } if (limits != null && leftConditionExpression != null) { return(NSPredicate.FromFormat("%@ BETWEEN %@", leftConditionExpression, NSExpression.FromAggregate(limits))); } } } return(new NSCompoundPredicate(NSCompoundPredicateType.And, subpredicates.ToArray())); } case "any": { var subpredicates = ToSubpredicates(SubArray(objects, 1)); return(new NSCompoundPredicate(NSCompoundPredicateType.Or, subpredicates.ToArray())); } default: { var expression = ToExpression(array); return(new NSComparisonPredicate( expression, NSExpression.FromConstant(NSNumber.FromBoolean(true)), NSComparisonPredicateModifier.Direct, NSPredicateOperatorType.EqualTo, 0 )); } } }
public NSComparisonPredicate(NSExpression leftExpression, NSExpression rightExpression, NSComparisonPredicateModifier modifier, NSPredicateOperatorType type, NSComparisonPredicateOptions options) { }