/// <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); }
/// <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> /// 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(MethodCallExpression expression, SqlWrapper sqlWrapper) { var field = expression.ToObject()?.ToString(); if (!field.IsNullOrEmpty()) { sqlWrapper.AddField(field); } return(sqlWrapper); }
/// <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); }
/// <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); }