/// <summary>
        /// Update
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Update(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var obj        = expression.ToObject();
            var properties = obj?.GetType().GetProperties();

            foreach (var item in properties)
            {
                var type = item.DeclaringType.ToString().Contains("AnonymousType") ?
                           sqlWrapper.DefaultType :
                           item.DeclaringType;

                var(columnName, isInsert, isUpdate) = sqlWrapper.GetColumnInfo(type, item);
                if (isUpdate)
                {
                    var value = item.GetValue(obj, null);
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper += columnName + " = ";
                        sqlWrapper.AddDbParameter(value);
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
            }

            return(sqlWrapper);
        }
Пример #2
0
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Update(NewExpression expression, SqlWrapper sqlWrapper)
        {
            for (int i = 0; i < expression.Members.Count; i++)
            {
                var m = expression.Members[i];
                var t = m.DeclaringType.ToString().Contains("AnonymousType") ?
                        sqlWrapper.DefaultType :
                        m.DeclaringType;

                var(columnName, isInsert, isUpdate) = sqlWrapper.GetColumnInfo(t, m);
                if (isUpdate)
                {
                    var value = expression.Arguments[i]?.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper += columnName + " = ";
                        sqlWrapper.AddDbParameter(value);
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
            }

            return(sqlWrapper);
        }
Пример #3
0
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Update(NewExpression expression, SqlWrapper sqlWrapper)
        {
            for (int i = 0; i < expression.Members.Count; i++)
            {
                var m = expression.Members[i];
                var t = m.DeclaringType.IsAnonymousType() ?
                        sqlWrapper.DefaultType :
                        m.DeclaringType;

                var columnInfo = sqlWrapper.GetColumnInfo(t, m);
                if (columnInfo.IsUpdate)
                {
                    var value = expression.Arguments[i]?.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper += columnInfo.ColumnName + " = ";
                        sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                        sqlWrapper += ",";
                    }
                }
            }

            sqlWrapper.RemoveLast(',');

            return(sqlWrapper);
        }
Пример #4
0
        /// <summary>
        /// Having
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Having(MethodCallExpression expression, SqlWrapper sqlWrapper)
        {
            var key = expression.Method;

            if (key.IsGenericMethod)
            {
                key = key.GetGenericMethodDefinition();
            }

            //匹配到方法
            if (methods.TryGetValue(key.Name, out Action <MethodCallExpression, SqlWrapper> handler))
            {
                handler(expression, sqlWrapper);

                return(sqlWrapper);
            }
            else
            {
                try
                {
                    sqlWrapper.AddDbParameter(expression.ToObject());

                    return(sqlWrapper);
                }
                catch
                {
                    throw new NotImplementedException("无法解析方法" + expression.Method);
                }
            }
        }
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Update(MemberInitExpression expression, SqlWrapper sqlWrapper)
        {
            foreach (MemberAssignment m in expression.Bindings)
            {
                var type = m.Member.DeclaringType.ToString().Contains("AnonymousType") ?
                           sqlWrapper.DefaultType :
                           m.Member.DeclaringType;

                var(columnName, isInsert, isUpdate) = sqlWrapper.GetColumnInfo(type, m.Member);
                if (isUpdate)
                {
                    var value = m.Expression.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper += columnName + " = ";
                        sqlWrapper.AddDbParameter(value);
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
            }

            return(sqlWrapper);
        }
Пример #6
0
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(NewExpression expression, SqlWrapper sqlWrapper)
        {
            if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
            {
                sqlWrapper.Append("(");
            }

            var fields = new List <string>();

            for (int i = 0; i < expression.Members?.Count; i++)
            {
                var m = expression.Members[i];
                var t = m.DeclaringType.IsAnonymousType() ?
                        sqlWrapper.DefaultType :
                        m.DeclaringType;

                var columnInfo = sqlWrapper.GetColumnInfo(t, m);
                if (columnInfo.IsInsert)
                {
                    var value = expression.Arguments[i]?.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                        if (!fields.Contains(columnInfo.ColumnName))
                        {
                            fields.Add(columnInfo.ColumnName);
                        }
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[^ 1] == ',')
Пример #7
0
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(NewExpression expression, SqlWrapper sqlWrapper)
        {
            if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
            {
                sqlWrapper.Append("(");
            }

            var fields = new List <string>();

            for (int i = 0; i < expression.Members?.Count; i++)
            {
                var m = expression.Members[i];
                var t = m.DeclaringType.IsAnonymousType() ?
                        sqlWrapper.DefaultType :
                        m.DeclaringType;

                var columnInfo = sqlWrapper.GetColumnInfo(t, m);
                if (columnInfo.IsInsert)
                {
                    var value = expression.Arguments[i]?.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                        if (!fields.Contains(columnInfo.ColumnName))
                        {
                            fields.Add(columnInfo.ColumnName);
                        }
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                {
                    sqlWrapper.Append(")");
                }
                else
                {
                    sqlWrapper.Append(" FROM DUAL");
                }
            }

            sqlWrapper.Reset(string.Format(sqlWrapper.ToString(), string.Join(",", fields).TrimEnd(',')));

            return(sqlWrapper);
        }
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(MemberInitExpression expression, SqlWrapper sqlWrapper)
        {
            if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
            {
                sqlWrapper.Append("(");
            }

            var fields = new List <string>();

            foreach (MemberAssignment m in expression.Bindings)
            {
                var type = m.Member.DeclaringType.ToString().Contains("AnonymousType") ?
                           sqlWrapper.DefaultType :
                           m.Member.DeclaringType;

                var(columnName, isInsert, isUpdate) = sqlWrapper.GetColumnInfo(type, m.Member);
                if (isInsert)
                {
                    var value = m.Expression.ToObject();
                    if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                    {
                        sqlWrapper.AddDbParameter(value);
                        if (!fields.Contains(columnName))
                        {
                            fields.Add(columnName);
                        }
                        sqlWrapper += ",";
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                {
                    sqlWrapper.Append(")");
                }
                else
                {
                    sqlWrapper.Append(" FROM DUAL");
                }
            }

            sqlWrapper.Reset(string.Format(sqlWrapper.ToString(), string.Join(",", fields).TrimEnd(',')));
            return(sqlWrapper);
        }
Пример #9
0
        /// <summary>
        /// Having
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Having(ConstantExpression expression, SqlWrapper sqlWrapper)
        {
            //表达式左侧为bool类型常量
            if (expression.NodeType == ExpressionType.Constant && expression.Value is bool res)
            {
                if (!res && sqlWrapper.EndsWith("AND", "OR"))
                {
                    sqlWrapper += " 1 = 0 ";
                }
            }
            else
            {
                sqlWrapper.AddDbParameter(expression.Value);
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Where
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Where(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            //此处判断expression的Member是否是可空值类型
            if (expression.Expression?.NodeType == ExpressionType.MemberAccess && expression.Member.DeclaringType.IsNullable())
            {
                expression = expression.Expression as MemberExpression;
            }

            if (expression != null)
            {
                if (expression.Expression?.NodeType == ExpressionType.Parameter)
                {
                    var type = expression.Expression.Type != expression.Member.DeclaringType ?
                               expression.Expression.Type :
                               expression.Member.DeclaringType;

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

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

                    sqlWrapper += tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).ColumnName;

                    //字段是bool类型
                    if (expression.NodeType == ExpressionType.MemberAccess && expression.Type.GetCoreType() == typeof(bool))
                    {
                        if (sqlWrapper.DatabaseType is DatabaseType.MySql or DatabaseType.PostgreSql)
                        {
                            sqlWrapper += " IS TRUE";
                        }
                        else
                        {
                            sqlWrapper += " = 1";
                        }
                    }
                }
                else
                {
                    sqlWrapper.AddDbParameter(expression.ToObject());
                }
            }
        /// <summary>
        /// Join
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Join(ConstantExpression expression, SqlWrapper sqlWrapper)
        {
            //表达式左侧为bool类型常量
            if (expression.NodeType == ExpressionType.Constant && expression.Value is bool b)
            {
                var sql = sqlWrapper.ToString().ToUpper().Trim();
                if (!b && (sql.EndsWith("AND") || sql.EndsWith("OR")))
                {
                    sqlWrapper += " 1 = 0 ";
                }
            }
            else
            {
                sqlWrapper.AddDbParameter(expression.Value);
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Where
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Where(UnaryExpression expression, SqlWrapper sqlWrapper)
        {
            var startIndex = sqlWrapper.Length;

            if (new[] { ExpressionType.ArrayLength, ExpressionType.ArrayIndex }.Contains(expression.NodeType))
            {
                sqlWrapper.AddDbParameter(expression.ToObject());
            }
            else
            {
                SqlExpressionProvider.Where(expression.Operand, sqlWrapper);

                //取非解析
                ExpressionNotResolver(expression, sqlWrapper, startIndex);
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(ListInitExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.ToObject() is IEnumerable collection)
            {
                var i      = 0;
                var fields = new List <string>();

                foreach (var item in collection)
                {
                    if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                    {
                        sqlWrapper.Append("(");
                    }

                    if (i > 0 && sqlWrapper.DatabaseType == DatabaseType.Oracle)
                    {
                        sqlWrapper.Append(" UNION ALL SELECT ");
                    }

                    var properties = item?.GetType().GetProperties();
                    foreach (var p in properties)
                    {
                        var type = p.DeclaringType.IsAnonymousType() ?
                                   sqlWrapper.DefaultType :
                                   p.DeclaringType;

                        var columnInfo = sqlWrapper.GetColumnInfo(type, p);
                        if (columnInfo.IsInsert)
                        {
                            var value = p.GetValue(item, null);
                            if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                            {
                                sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                                if (!fields.Contains(columnInfo.ColumnName))
                                {
                                    fields.Add(columnInfo.ColumnName);
                                }
                                sqlWrapper += ",";
                            }
                        }
                    }

                    if (sqlWrapper[^ 1] == ',')
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper In(ConstantExpression expression, SqlWrapper sqlWrapper)
        {
            sqlWrapper.AddDbParameter(expression.Value);

            return(sqlWrapper);
        }
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(ListInitExpression expression, SqlWrapper sqlWrapper)
        {
            if (expression.ToObject() is IEnumerable collection)
            {
                var i      = 0;
                var fields = new List <string>();

                foreach (var item in collection)
                {
                    if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                    {
                        sqlWrapper.Append("(");
                    }

                    if (i > 0 && sqlWrapper.DatabaseType == DatabaseType.Oracle)
                    {
                        sqlWrapper.Append(" UNION ALL SELECT ");
                    }

                    var properties = item?.GetType().GetProperties();
                    foreach (var p in properties)
                    {
                        var type = p.DeclaringType.IsAnonymousType() ?
                                   sqlWrapper.DefaultType :
                                   p.DeclaringType;

                        var columnInfo = sqlWrapper.GetColumnInfo(type, p);
                        if (columnInfo.IsInsert)
                        {
                            var value = p.GetValue(item, null);
                            if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                            {
                                sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                                if (!fields.Contains(columnInfo.ColumnName))
                                {
                                    fields.Add(columnInfo.ColumnName);
                                }
                                sqlWrapper += ",";
                            }
                        }
                    }

                    if (sqlWrapper[sqlWrapper.Length - 1] == ',')
                    {
                        sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                        if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                        {
                            sqlWrapper.Append("),");
                        }
                        else
                        {
                            sqlWrapper.Append(" FROM DUAL");
                        }
                    }

                    i++;
                }

                sqlWrapper.RemoveLast(',');

                sqlWrapper.Reset(string.Format(sqlWrapper.ToString(), string.Join(",", fields).TrimEnd(',')));
            }

            return(sqlWrapper);
        }
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql打包对象</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var objectArray = new List <object>();
            var fields      = new List <string>();
            var obj         = expression.ToObject();

            if (obj.GetType().IsArray)
            {
                objectArray.AddRange(obj as object[]);
            }
            else if (obj.GetType().Name == "List`1")
            {
                objectArray.AddRange(obj as IEnumerable <object>);
            }
            else
            {
                objectArray.Add(obj);
            }

            for (var i = 0; i < objectArray.Count; i++)
            {
                if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                {
                    sqlWrapper.Append("(");
                }

                if (i > 0 && sqlWrapper.DatabaseType == DatabaseType.Oracle)
                {
                    sqlWrapper.Append(" UNION ALL SELECT ");
                }

                var properties = objectArray[i]?.GetType().GetProperties();
                foreach (var p in properties)
                {
                    var type = p.DeclaringType.ToString().Contains("AnonymousType") ?
                               sqlWrapper.DefaultType :
                               p.DeclaringType;

                    var(columnName, isInsert, isUpdate) = sqlWrapper.GetColumnInfo(type, p);
                    if (isInsert)
                    {
                        var value = p.GetValue(objectArray[i], null);
                        if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                        {
                            sqlWrapper.AddDbParameter(value);
                            if (!fields.Contains(columnName))
                            {
                                fields.Add(columnName);
                            }
                            sqlWrapper += ",";
                        }
                    }
                }

                if (sqlWrapper[sqlWrapper.Length - 1] == ',')
                {
                    sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                    if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                    {
                        sqlWrapper.Append("),");
                    }
                    else
                    {
                        sqlWrapper.Append(" FROM DUAL");
                    }
                }
            }

            if (sqlWrapper[sqlWrapper.Length - 1] == ',')
            {
                sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
            }

            sqlWrapper.Reset(string.Format(sqlWrapper.ToString(), string.Join(",", fields).TrimEnd(',')));

            return(sqlWrapper);
        }
        /// <summary>
        /// Insert
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Insert(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var objectArray = new List <object>();
            var fields      = new List <string>();
            var convertRes  = expression.ToObject();

            if (convertRes.IsNull())
            {
                return(sqlWrapper);
            }

            if (!convertRes.GetType().IsDictionaryType() &&
                convertRes is IEnumerable collection)
            {
                foreach (var item in collection)
                {
                    objectArray.Add(item);
                }
            }
            else
            {
                objectArray.Add(convertRes);
            }

            for (var i = 0; i < objectArray.Count; i++)
            {
                if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                {
                    sqlWrapper.Append("(");
                }

                if (i > 0 && sqlWrapper.DatabaseType == DatabaseType.Oracle)
                {
                    sqlWrapper.Append(" UNION ALL SELECT ");
                }

                var objectType       = objectArray[i]?.GetType();
                var isDictionaryType = objectType.IsDictionaryType();

                PropertyInfo[] properties;
                IDictionary <string, object> objectDic = null;

                if (!isDictionaryType)
                {
                    properties = objectType?.GetProperties();
                }
                else
                {
                    properties = sqlWrapper.DefaultType.GetProperties();
                    objectDic  = objectArray[i] as IDictionary <string, object>;
                }

                foreach (var property in properties)
                {
                    if (isDictionaryType && !objectDic.Any(x => x.Key.EqualIgnoreCase(property.Name)))
                    {
                        continue;
                    }

                    var type = property.DeclaringType.IsAnonymousType() || isDictionaryType ?
                               sqlWrapper.DefaultType :
                               property.DeclaringType;

                    var columnInfo = sqlWrapper.GetColumnInfo(type, property);
                    if (columnInfo.IsInsert)
                    {
                        object value;

                        if (isDictionaryType)
                        {
                            value = objectDic.FirstOrDefault(x => x.Key.EqualIgnoreCase(property.Name)).Value;
                        }
                        else
                        {
                            value = property.GetValue(objectArray[i], null);
                        }

                        if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                        {
                            sqlWrapper.AddDbParameter(value, columnInfo.DataType);

                            if (!fields.Contains(columnInfo.ColumnName))
                            {
                                fields.Add(columnInfo.ColumnName);
                            }

                            sqlWrapper += ",";
                        }
                    }
                }

                if (sqlWrapper[sqlWrapper.Length - 1] == ',')
                {
                    sqlWrapper.Remove(sqlWrapper.Length - 1, 1);
                    if (sqlWrapper.DatabaseType != DatabaseType.Oracle)
                    {
                        sqlWrapper.Append("),");
                    }
                    else
                    {
                        sqlWrapper.Append(" FROM DUAL");
                    }
                }
            }

            sqlWrapper.RemoveLast(',');

            sqlWrapper.Reset(string.Format(sqlWrapper.ToString(), string.Join(",", fields).TrimEnd(',')));

            return(sqlWrapper);
        }
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression">表达式树</param>
        /// <param name="sqlWrapper">sql包装器</param>
        /// <returns>SqlWrapper</returns>
        public override SqlWrapper Update(MemberExpression expression, SqlWrapper sqlWrapper)
        {
            var convertRes = expression.ToObject();

            if (convertRes.IsNull())
            {
                return(sqlWrapper);
            }

            var convertType      = convertRes?.GetType();
            var isDictionaryType = convertType.IsDictionaryType();

            PropertyInfo[] properties;
            IDictionary <string, object> convertDic = null;

            if (!isDictionaryType)
            {
                properties = convertType?.GetProperties();
            }
            else
            {
                properties = sqlWrapper.DefaultType.GetProperties();
                convertDic = convertRes as IDictionary <string, object>;
            }

            if (properties.IsNotNullOrEmpty())
            {
                foreach (var item in properties)
                {
                    if (isDictionaryType && !convertDic.Any(x => x.Key.EqualIgnoreCase(item.Name)))
                    {
                        continue;
                    }

                    var type = item.DeclaringType.IsAnonymousType() || isDictionaryType ?
                               sqlWrapper.DefaultType :
                               item.DeclaringType;

                    var columnInfo = sqlWrapper.GetColumnInfo(type, item);
                    if (columnInfo.IsUpdate)
                    {
                        object value;

                        if (isDictionaryType)
                        {
                            value = convertDic.FirstOrDefault(x => x.Key.EqualIgnoreCase(item.Name)).Value;
                        }
                        else
                        {
                            value = item.GetValue(convertRes, null);
                        }

                        if (value != null || (sqlWrapper.IsEnableNullValue && value == null))
                        {
                            sqlWrapper += columnInfo.ColumnName + " = ";
                            sqlWrapper.AddDbParameter(value, columnInfo.DataType);
                            sqlWrapper += ",";
                        }
                    }
                }
            }

            sqlWrapper.RemoveLast(',');

            return(sqlWrapper);
        }