public bool Evaluate(object column1Value, object column2Value) { var value1 = Column1 == null ? Value1 : column1Value; var value2 = Column2 == null ? Value2 : column2Value; if (Operator == ECompare.IsIn && Value2.GetType().IsArray) { foreach (var value in (IEnumerable)Value2) { var compare = Compare(CompareDataType, value1, value); if (compare == ECompareResult.Equal) { return(true); } } return(false); } if (Operator == ECompare.IsNull) { return(value1 == null || value1 is DBNull); } if (Operator == ECompare.IsNotNull) { return(value1 != null && !(value1 is DBNull)); } var compareResult = Compare(CompareDataType, value1, value2); switch (Operator) { case ECompare.IsEqual: return(compareResult == ECompareResult.Equal); case ECompare.GreaterThan: return(compareResult == ECompareResult.Greater); case ECompare.GreaterThanEqual: return(compareResult == ECompareResult.Greater || compareResult == ECompareResult.Equal); case ECompare.LessThan: return(compareResult == ECompareResult.Less); case ECompare.LessThanEqual: return(compareResult == ECompareResult.Less || compareResult == ECompareResult.Equal); case ECompare.NotEqual: return(compareResult != ECompareResult.Equal); case ECompare.IsIn: return(compareResult == ECompareResult.Equal); default: throw new QueryException($"The {Operator} is not currently supported in the query evaluation."); } }
/// <summary> /// <para>Default call for atributtes by the Service Proxy before the methody body.</para> /// </summary> /// <param name="method"> /// <para>Method .</para> /// </param> /// <param name="il"> /// <para>Il from assembly to override the method.</para> /// </param> /// <returns> /// <para>true if can execute method</para> /// </returns> public override bool MtnBeforeExecution(MethodInfo method, ILHelper il) { const BindingFlags bindFlag = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance; var name = "MtnAfterPermission" + Guid.NewGuid(); // for security reasons set to int.MinValue if (Value1 == null) { Value1 = int.MinValue; } if (Value2 == null) { Value2 = int.MinValue; } if (Value3 == null) { Value3 = int.MinValue; } if (Value4 == null) { Value4 = int.MinValue; } // create local variables il .CreateLocalVar("Mtn.IsPermitted", typeof(bool), false) .CreateLocalVar("Mtn.PermissionParameter1", Value1.GetType(), true) .CreateLocalVar("Mtn.PermissionParameter2", Value2.GetType(), true) .CreateLocalVar("Mtn.PermissionParameter3", Value3.GetType(), true) .CreateLocalVar("Mtn.PermissionParameter4", Value4.GetType(), true); // load Value1 il .LoadVar("Mtn.PermissionParameter1") .LoadObject(Value1) .Box(Value1.GetType()) .SetVar("Mtn.PermissionParameter1"); // load Value2 il .LoadObject(Value2) .Box(Value2.GetType()) .SetVar("Mtn.PermissionParameter2"); // load Value3 il .LoadObject(Value3) .Box(Value3.GetType()) .SetVar("Mtn.PermissionParameter3"); // load Value4 il .LoadObject(Value4) .Box(Value4.GetType()) .SetVar("Mtn.PermissionParameter4"); // put all variables in stack il .LoadVar("Mtn.PermissionParameter1") .UnboxAny(typeof(object)) .LoadVar("Mtn.PermissionParameter2") .UnboxAny(typeof(object)) .LoadVar("Mtn.PermissionParameter3") .UnboxAny(typeof(object)) .LoadVar("Mtn.PermissionParameter4") .UnboxAny(typeof(object)); // invoke method il .InvokeMethod(typeof(Permission), "HasPermission", bindFlag) .SetVar("Mtn.IsPermitted") .LoadVar("Mtn.IsPermitted") .GotoIfNotNullOrTrue(name); // if is invalid returns the default value il .InvokeMethod(typeof(Permission).GetProperty("UnallowedResult").GetGetMethod()) .SetVar("Mtn.ReturnValue") .LoadVar("Mtn.ReturnValue") .GotoIfNotNullOrTrue("MtnAfterAll"); il.MarkLabel(name); return(true); }