Beispiel #1
0
 public virtual LambdaExpression CompareValue(ExpressionValue left, ExpressionValue right)
 {
     if (!right.IsConst)
     {
         // TODO ..
         // throw
     }
     if (right.ValueInfo.ConstantValue is IList list)
     {
         var parameter      = Expression.Parameter(left.SourceType);
         var leftExpression = left.GetLambda(parameter);
         var listType       = typeof(List <>).MakeGenericType(leftExpression.ReturnType);
         var method         = GetListContainsMethod(listType);
         var data           = ConvertListItems(listType, leftExpression.ReturnType, list);
         if (data.Count == 0)
         {
             return(Expression.Lambda(Expression.Constant(false), parameter));
         }
         return(Expression.Lambda(
                    Expression.Call(Expression.Constant(data !), method, leftExpression.Body),
                    parameter));
     }
     else
     {
         // TODO ..
         // throw
     }
     throw new NotImplementedException();
 }
Beispiel #2
0
        public LambdaExpression CompareValue(ExpressionValue left, ExpressionValue right)

        {
            if (left.IsConst && !right.IsConst)
            {
                var parameter = Expression.Parameter(left.SourceType);

                var rightLambda = right.GetLambda(parameter);
                // ensure both right and left use the same parameter
                var leftLambda = left.GetLambda(parameter, rightLambda.ReturnType);
                var expression = CompareValue(leftLambda.Body, rightLambda.Body, rightLambda.ReturnType);
                return(Expression.Lambda(typeof(Func <,>).MakeGenericType(left.SourceType, typeof(bool)), expression, parameter));
            }
            else
            {
                var parameter  = Expression.Parameter(left.SourceType);
                var leftLambda = left.GetLambda(parameter);
                // ensure both right and left use the same parameter
                var rightLambda = right.GetLambda(parameter, leftLambda.ReturnType);
                var expression  = CompareValue(leftLambda.Body, rightLambda.Body, leftLambda.ReturnType);
                return(Expression.Lambda(typeof(Func <,>).MakeGenericType(left.SourceType, typeof(bool)), expression, parameter));
            }
        }