/// <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); }
/// <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); }
/// <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] == ',')
/// <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); }
/// <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> /// 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); }
/// <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); }
/// <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); }
/// <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> /// 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); }
/// <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> /// Join /// </summary> /// <param name="expression">表达式树</param> /// <param name="sqlWrapper">sql包装器</param> /// <returns>SqlWrapper</returns> public override SqlWrapper Join(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.IsNotNullOrEmpty()) { tableAlias += "."; } sqlWrapper += tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).ColumnName; return(sqlWrapper); }
/// <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}"; } }
/// <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; sqlWrapper.SetTableAlias(tableName, parameter?.Name); string tableAlias = sqlWrapper.GetTableAlias(tableName, parameter?.Name); if (!tableAlias.IsNullOrEmpty()) { tableAlias += "."; } sqlWrapper.AddField(tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).columnName); 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> /// 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> /// 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); }
/// <summary> /// OrderBy /// </summary> /// <param name="expression">表达式树</param> /// <param name="sqlWrapper">sql打包对象</param> /// <param name="orders">排序方式</param> /// <returns>SqlWrapper</returns> public override SqlWrapper OrderBy(MemberExpression expression, SqlWrapper sqlWrapper, params OrderType[] orders) { var tableAlias = string.Empty; var tableName = string.Empty; if (expression.Expression.NodeType == ExpressionType.Parameter) { var type = expression.Expression.Type != expression.Member.DeclaringType ? expression.Expression.Type : expression.Member.DeclaringType; tableName = sqlWrapper.GetTableName(type); } if (expression.Expression.NodeType == ExpressionType.Constant) { tableName = sqlWrapper.GetTableName(sqlWrapper.DefaultType); } tableAlias = sqlWrapper.GetTableAlias(tableName, tableAlias); if (!tableAlias.IsNullOrEmpty()) { tableAlias += "."; } if (expression.Expression.NodeType == ExpressionType.Parameter) { sqlWrapper += tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).columnName; if (orders?.Length > 0) { sqlWrapper += $" { (orders[0] == OrderType.Descending ? "DESC" : "ASC")}"; } } if (expression.Expression.NodeType == ExpressionType.Constant) { var obj = expression.ToObject(); if (obj != null) { var type = obj.GetType().Name; if (type == "String[]" && obj is string[] array) { for (var i = 0; i < array.Length; i++) { SqlExpressionProvider.OrderBy(Expression.Constant(array[i], array[i].GetType()), sqlWrapper); if (i <= orders.Length - 1) { sqlWrapper += $" { (orders[i] == OrderType.Descending ? "DESC" : "ASC")},"; } else if (!array[i].ToUpper().Contains("ASC") && !array[i].ToUpper().Contains("DESC")) { sqlWrapper += " ASC,"; } else { sqlWrapper += ","; } } sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } if (type == "List`1" && obj is List <string> list) { for (var i = 0; i < list.Count; i++) { SqlExpressionProvider.OrderBy(Expression.Constant(list[i], list[i].GetType()), sqlWrapper); if (i <= orders.Length - 1) { sqlWrapper += $" { (orders[i] == OrderType.Descending ? "DESC" : "ASC")},"; } else if (!list[i].ToUpper().Contains("ASC") && !list[i].ToUpper().Contains("DESC")) { sqlWrapper += " ASC,"; } else { sqlWrapper += ","; } } sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } if (type == "String" && obj is string str) { SqlExpressionProvider.OrderBy(Expression.Constant(str, str.GetType()), sqlWrapper); str = str.ToUpper(); if (!str.Contains("ASC") && !str.Contains("DESC")) { if (orders.Length >= 1) { sqlWrapper += $" { (orders[0] == OrderType.Descending ? "DESC" : "ASC")},"; } else { sqlWrapper += " ASC,"; } sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } } } } 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> /// GroupBy /// </summary> /// <param name="expression">表达式树</param> /// <param name="sqlWrapper">sql打包对象</param> /// <returns>SqlWrapper</returns> public override SqlWrapper GroupBy(MemberExpression expression, SqlWrapper sqlWrapper) { var tableAlias = string.Empty; var tableName = string.Empty; if (expression.Expression.NodeType == ExpressionType.Parameter) { var type = expression.Expression.Type != expression.Member.DeclaringType ? expression.Expression.Type : expression.Member.DeclaringType; tableName = sqlWrapper.GetTableName(type); tableAlias = (expression.Expression as ParameterExpression)?.Name; } if (expression.Expression.NodeType == ExpressionType.Constant) { tableName = sqlWrapper.GetTableName(sqlWrapper.DefaultType); } tableAlias = sqlWrapper.GetTableAlias(tableName, tableAlias); if (!tableAlias.IsNullOrEmpty()) { tableAlias += "."; } if (expression.Expression.NodeType == ExpressionType.Parameter) { sqlWrapper += tableAlias + sqlWrapper.GetColumnInfo(expression.Member.DeclaringType, expression.Member).columnName; } if (expression.Expression.NodeType == ExpressionType.Constant) { var obj = expression.ToObject(); if (obj != null) { var type = obj.GetType().Name; if (type == "String[]" && obj is string[] array) { foreach (var item in array) { SqlExpressionProvider.GroupBy(Expression.Constant(item, item.GetType()), sqlWrapper); } sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } if (type == "List`1" && obj is List <string> list) { foreach (var item in list) { SqlExpressionProvider.GroupBy(Expression.Constant(item, item.GetType()), sqlWrapper); } sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } if (type == "String" && obj is string str) { SqlExpressionProvider.GroupBy(Expression.Constant(str, str.GetType()), sqlWrapper); sqlWrapper.Remove(sqlWrapper.Length - 1, 1); } } } return(sqlWrapper); }