/// <summary> /// Predicates for rule. /// </summary> /// <param name="condition">The condition.</param> /// <param name="isResourceCondition">if set to <c>true</c> [is resource condition].</param> /// <param name="gridResultColumn">The result column.</param> /// <param name="conditionalFormatter">The conditional formatter column.</param> /// <returns>Predicate{System.Object}.</returns> private static Predicate <object> PredicateForRule(Condition condition, bool isResourceCondition, ResultColumn gridResultColumn, ConditionalFormatter conditionalFormatter) { try { Predicate <object> valueFilterPredicate = BuildValueFilterPredicateNoNulls(condition, gridResultColumn, conditionalFormatter); return(value => { try { // Handle nulls // for now ANY type of filter on a column will reject null values if (value == null || value is DBNull) { switch (condition.Operator) { case ConditionType.NotEqual: value = ""; break; case ConditionType.IsNull: return true; case ConditionType.IsNotNull: return false; case ConditionType.AnyExcept: return true; default: return false; } } // Handle transforms if (isResourceCondition) { var xml = (string)value; if (condition.Operator == ConditionType.AnyExcept || condition.Operator == ConditionType.AnyOf || condition.Operator == ConditionType.CurrentUser) { value = DatabaseTypeHelper.GetEntityXmlId(xml); } else { value = DatabaseTypeHelper.GetEntityXmlName(xml); } } // Evaluate the specific predicate return valueFilterPredicate(value); } catch { return false; //throw new Exception( string.Format( "Predicate failed. Data={0} {1}. Expected={2}", value == null ? "null" : value.GetType( ).Name, value, condition.ColumnType ), ex ); } }); } catch (ArgumentException) { return(null); // argument does not exist .. return null } }