/// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Expression.NodeType != ExpressionType.Constant)
            {
                var type = expression.Expression.Type != expression.Member.DeclaringType ?
                           expression.Expression.Type :
                           expression.Member.DeclaringType;

                var tableName  = sqlWrapper.GetTableName(type);
                var parameter  = expression.Expression as ParameterExpression;
                var tableAlias = sqlWrapper.GetTableAlias(tableName, parameter?.Name);

                if (tableAlias.IsNotNullOrEmpty())
                {
                    tableAlias += ".";
                }

                sqlWrapper.AddField(tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).ColumnName);
            }
            else
            {
                var field = expression.ToObject()?.ToString();
                sqlWrapper.AddField(field);
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Count
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Count(ConstantExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression?.Value == null)
            {
                sqlWrapper.AddField("*");
            }
            else
            {
                sqlWrapper.AddField(expression.Value.ToString());
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Max
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Max(ConstantExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression?.Value != null)
            {
                sqlWrapper.AddField(expression.Value.ToString());
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(ParameterExpression expression, SqlWrapper sqlWrapper)
        {
            var tableName  = sqlWrapper.GetTableName(expression.Type);
            var tableAlias = sqlWrapper.GetTableAlias(tableName, expression.Name);

            sqlWrapper.AddField($"{tableAlias}.*");

            return(sqlWrapper);
        }
        /// <summary>
        /// Sum
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Sum(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression?.Member != null)
            {
                var columnName = sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).ColumnName;
                sqlWrapper.AddField(columnName);
            }

            return(sqlWrapper);
        }
Пример #6
0
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(MemberInitExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Bindings?.Count > 0)
            {
                foreach (MemberAssignment memberAssignment in expression.Bindings)
                {
                    var type = expression.Type != memberAssignment.Member.DeclaringType ?
                               expression.Type :
                               memberAssignment.Member.DeclaringType;

                    var aliasName = memberAssignment.Member.Name;
                    var tableName = sqlWrapper.GetTableName(type);

                    if ((memberAssignment.Expression as MemberExpression)?.Expression is ParameterExpression parameterExpr)
                    {
                        var tableAlias = sqlWrapper.GetTableAlias(tableName, parameterExpr.Name);

                        if (!tableAlias.IsNullOrEmpty())
                        {
                            tableAlias += ".";
                        }

                        var fieldName = tableAlias + sqlWrapper.GetColumnInfo(type, memberAssignment.Member).columnName;

                        sqlWrapper.AddField(fieldName);
                    }
                    else
                    {
                        var fieldName = memberAssignment.Expression.ToObject().ToString();

                        sqlWrapper.AddField(fieldName);
                    }

                    sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(aliasName)}";
                }
            }
            else
            {
                sqlWrapper.AddField("*");
            }

            return(sqlWrapper);
        }
Пример #7
0
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(MemberInitExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Bindings?.Count > 0)
            {
                foreach (MemberAssignment memberAssignment in expression.Bindings)
                {
                    if (memberAssignment.Expression is MemberExpression memberExpr && memberExpr.Expression is ParameterExpression parameterExpr)
                    {
                        var type       = parameterExpr.Type;
                        var tableName  = sqlWrapper.GetTableName(type);
                        var tableAlias = sqlWrapper.GetTableAlias(tableName, parameterExpr.Name);

                        if (tableAlias.IsNotNullOrEmpty())
                        {
                            tableAlias += ".";
                        }

                        var fieldName = tableAlias + sqlWrapper.GetColumnInfo(type, memberExpr.Member).ColumnName;

                        sqlWrapper.AddField(fieldName);
                    }
                    else
                    {
                        var fieldName = memberAssignment.Expression.ToObject().ToString();

                        sqlWrapper.AddField(fieldName);
                    }

                    var aliasName = sqlWrapper.GetColumnName(memberAssignment.Member.Name);

                    var field = sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1];

                    if (field.IsNotNullOrEmpty() && field.Contains(".") && !field.Contains("(", ")"))
                    {
                        field = field.Split('.').LastOrDefault();
                    }

                    if (!field.Equals(!sqlWrapper.IsEnableFormat, aliasName))
                    {
                        sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {aliasName}";
                    }
                }
Пример #8
0
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(MethodCallExpression expression, SqlWrapper sqlWrapper)
        {
            var field = expression.ToObject()?.ToString();

            if (!field.IsNullOrEmpty())
            {
                sqlWrapper.AddField(field);
            }

            return(sqlWrapper);
        }
Пример #9
0
        /// <summary>
        /// Count
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Count(NewExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Members != null)
            {
                for (var i = 0; i < expression.Members.Count; i++)
                {
                    var argument = expression.Arguments[i];
                    SqlExpressionProvider.Count(argument, sqlWrapper);
                }
            }
            else
            {
                sqlWrapper.AddField("*");
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var type = expression.Expression.Type != expression.Member.DeclaringType ?
                       expression.Expression.Type :
                       expression.Member.DeclaringType;

            var tableName  = sqlWrapper.GetTableName(type);
            var parameter  = expression.Expression as ParameterExpression;
            var tableAlias = sqlWrapper.GetTableAlias(tableName, parameter?.Name);

            if (!tableAlias.IsNullOrEmpty())
            {
                tableAlias += ".";
            }

            sqlWrapper.AddField(tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).columnName);

            return(sqlWrapper);
        }
Пример #11
0
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(NewExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Members != null)
            {
                for (var i = 0; i < expression.Members.Count; i++)
                {
                    var argument = expression.Arguments[i];

                    SqlExpressionProvider.Select(argument, sqlWrapper);

                    var fieldName = sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1];
                    if (fieldName.IsNotNullOrEmpty() && fieldName.Contains(".") && !fieldName.Contains("(", ")"))
                    {
                        fieldName = fieldName.Split('.').LastOrDefault();
                    }

                    var memberName = sqlWrapper.GetColumnName(expression.Members[i].Name);

                    //添加字段别名
                    if (argument is MemberExpression memberExpression)
                    {
                        var agrumentName = sqlWrapper.GetColumnName(memberExpression.Member.Name);

                        if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, memberName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {memberName}";
                        }

                        else if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, fieldName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {agrumentName}";
                        }
                    }
                    else if (argument is ConstantExpression constantExpression)
                    {
                        var agrumentName = sqlWrapper.GetColumnName(constantExpression.Value?.ToString());

                        if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, memberName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {memberName}";
                        }

                        else if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, fieldName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {agrumentName}";
                        }
                    }
                    else if (argument is MethodCallExpression methodCallExpression)
                    {
                        var agrumentName = methodCallExpression.ToObject <string>(out var res);
                        if (!res)
                        {
                            agrumentName = sqlWrapper.SelectFields.LastOrDefault();
                        }

                        agrumentName = sqlWrapper.GetColumnName(agrumentName);

                        if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, memberName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {memberName}";
                        }

                        else if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, fieldName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {agrumentName}";
                        }
                    }
                    else if (argument is BinaryExpression binaryExpression)
                    {
                        var agrumentName = sqlWrapper.GetColumnName(binaryExpression.ToObject()?.ToString());

                        if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, memberName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {memberName}";
                        }

                        else if (!agrumentName.Equals(!sqlWrapper.IsEnableFormat, fieldName))
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {agrumentName}";
                        }
                    }
                }
            }
            else
            {
                sqlWrapper.AddField("*");
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Select(NewExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.Members != null)
            {
                for (var i = 0; i < expression.Members.Count; i++)
                {
                    var argument = expression.Arguments[i];
                    var member   = expression.Members[i];
                    SqlExpressionProvider.Select(argument, sqlWrapper);

                    var fieldName = sqlWrapper
                                    .SelectFields[sqlWrapper.FieldCount - 1]
                                    .Split('.')
                                    .LastOrDefault()?
                                    .Replace("[", "")
                                    .Replace("]", "")
                                    .Replace("\"", "")
                                    .Replace("`", "");

                    //添加字段别名
                    if (argument is MemberExpression memberExpression)
                    {
                        var agrumentName = memberExpression.Member.Name;

                        if (agrumentName != member.Name)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}";
                        }

                        else if (agrumentName != fieldName)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(agrumentName)}";
                        }
                    }
                    else if (argument is ConstantExpression constantExpression)
                    {
                        var agrumentName = constantExpression.Value?.ToString();

                        if (agrumentName != member.Name)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}";
                        }

                        else if (agrumentName != fieldName)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(agrumentName)}";
                        }
                    }
                    else if (argument is MethodCallExpression methodCallExpression)
                    {
                        var agrumentName = methodCallExpression.ToObject()?.ToString();

                        if (agrumentName != member.Name)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}";
                        }

                        else if (agrumentName != fieldName)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(agrumentName)}";
                        }
                    }
                    else if (argument is BinaryExpression binaryExpression)
                    {
                        var agrumentName = binaryExpression.ToObject()?.ToString();

                        if (agrumentName != member.Name)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}";
                        }

                        else if (agrumentName != fieldName)
                        {
                            sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(agrumentName)}";
                        }
                    }
                }
            }
            else
            {
                sqlWrapper.AddField("*");
            }

            return(sqlWrapper);
        }