/// <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); //添加字段别名 if (argument is MemberExpression memberExpression && memberExpression.Member.Name != member.Name) { sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}"; } else if (argument is ConstantExpression constantExpression && constantExpression.Value?.ToString() != member.Name) { sqlWrapper.SelectFields[sqlWrapper.FieldCount - 1] += $" AS {sqlWrapper.GetFormatName(member.Name)}"; }
/// <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(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); }