/// <summary> /// Select /// </summary> /// <param name="expression">表达式树</param> /// <param name="sqlWrapper">sql包装器</param> /// <returns>SqlWrapper</returns> public override SqlWrapper Select(BinaryExpression expression, SqlWrapper sqlWrapper) { var field = expression?.ToObject(); if (field != null) { SqlExpressionProvider.Select(Expression.Constant(field), sqlWrapper); } 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); //添加字段别名 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(UnaryExpression expression, SqlWrapper sqlWrapper) { SqlExpressionProvider.Select(expression.Operand, sqlWrapper); 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); }
/// <summary> /// Select /// </summary> /// <param name="expression">表达式树</param> /// <param name="sqlWrapper">sql打包对象</param> /// <returns>SqlWrapper</returns> public override SqlWrapper Select(LambdaExpression expression, SqlWrapper sqlWrapper) { SqlExpressionProvider.Select(expression.Body, sqlWrapper); return(sqlWrapper); }