예제 #1
0
        bool IsMethodCall(Expression expression)
        {
            if (expression is MethodCallExpression)
            {
                var callExpression = expression as MethodCallExpression;
                return(EqualsExtensions.IsAnyEqualsIgnoreCase(IsMethod.isContains, IsMethod.isEmpty));
            }

            return(false);
        }
        public override void ExecuteResult(ActionContext context)
        {
            var response    = context.HttpContext.Response;
            var isMultiPart = context.HttpContext.Request.ContentType.Contains("multipart/form-data");
            var isIe        = EqualsExtensions.IsAnyEqualsIgnoreCase("IE");

            response.ContentType = isMultiPart && isIe ? "text/html" : "application/json";
            using (StreamWriter tw = new StreamWriter(response.Body))
            {
                tw.Write(Data.ToJsonString());
            }
        }
        public override async Task ExecuteResultAsync(ActionContext context)
        {
            var  response    = context.HttpContext.Response;
            bool?isMultiPart = context.HttpContext.Request.ContentType?.Contains("multipart/form-data");
            var  isIe        = EqualsExtensions.IsAnyEqualsIgnoreCase("IE");

            response.ContentType = isMultiPart.GetValueOrDefault() && isIe ? "text/html" : "application/json";
            using (StreamWriter tw = new StreamWriter(response.Body))
            {
                await tw.WriteAsync(Data.ToJsonString());
            }
        }
        public ResultSelector For <T>(Expression <Func <T, object> > property)
        {
            bool isMethod = property.Body is MethodCallExpression;

            if (isMethod)
            {
                var  body     = (MethodCallExpression)property.Body;
                bool isSelect = EqualsExtensions.IsAnyEqualsIgnoreCase("Select");
                if (isSelect)
                {
                    var left  = (MemberExpression)body.Arguments[0];
                    var right = (LambdaExpression)body.Arguments[1];
                    return(new ResultSelector(this.currentType, "{0}.{1}({2})".F(left.Member.Name, body.Method.Name, ((MemberExpression)right.Body).Member.Name)));
                }
                bool isIndex0 = EqualsExtensions.IsAnyEqualsIgnoreCase("First", "FirstOrDefault");
                if (isIndex0)
                {
                    var left = (MemberExpression)body.Arguments[0];
                    return(new ResultSelector(this.currentType, "{0}[0]".F(left.Member.Name)));
                }

                bool isByIndex = EqualsExtensions.IsAnyEqualsIgnoreCase("ElementAt", "ElementAtOrDefault");
                if (isByIndex)
                {
                    var left  = (MemberExpression)body.Arguments[0];
                    var right = (ConstantExpression)body.Arguments[1];
                    return(new ResultSelector(this.currentType, "{0}[{1}]".F(left.Member.Name, right.Value)));
                }
            }
            if (property.Body.NodeType == ExpressionType.Convert)
            {
                var expression = (UnaryExpression)property.Body;
                if (expression.Operand.NodeType != ExpressionType.MemberAccess)
                {
                    var  body  = (MethodCallExpression)expression.Operand;
                    bool isAny = EqualsExtensions.IsAnyEqualsIgnoreCase("Any");
                    if (isAny)
                    {
                        var     left  = (MemberExpression)body.Arguments[0];
                        var     right = new ConditionalIs(((LambdaExpression)body.Arguments[1]).Body, false, true);
                        dynamic data  = right.GetData();
                        return(new ResultSelector(this.currentType, string.Format("{0}.Any({1} {2} {3} {4})", left.Member.Name, data.left, data.method, data.right, data.inverse)));
                    }
                }
            }

            return(new ResultSelector(this.currentType, ReflectionExtensions.GetMemberName((LambdaExpression)property)));
        }