diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index 6e4456edc..38586fa4a 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -13,7 +13,7 @@ using System.Collections.ObjectModel; using NetTaste; using Newtonsoft.Json.Linq; using System.Xml.Linq; - +using Microsoft.Data.SqlClient; namespace SqlSugar { @@ -1434,9 +1434,11 @@ namespace SqlSugar var ps = this.QueryBuilder.Parameters; var itemProperty = typeof(TResult).GetProperty(subPara.Key); var callType = itemProperty.PropertyType.GetGenericArguments()[0]; - var methodParamters = new object[] { subPara.Value.ObjToString().Replace("@sugarIndex", "0"), ps }; + var sql = subPara.Value.ObjToString().Replace("@sugarIndex", "0"); + sql =SqlBuilder.RemoveParentheses(sql); + var methodParamters = new object[] { sql, ps }; var subList = ExpressionBuilderHelper.CallFunc(callType, methodParamters, this.Clone(), "SubQueryList"); - for(var i=0;i names = new List(); + var allShortName = new List(); + allShortName.Add(this.Builder.SqlTranslationLeft + Builder.GetNoTranslationColumnName(this.TableShortName.ObjToString().ToLower() + this.Builder.SqlTranslationRight + ".")); + if (this.JoinQueryInfos.HasValue()) + { + foreach (var item in this.JoinQueryInfos) + { + allShortName.Add(this.Builder.SqlTranslationLeft + Builder.GetNoTranslationColumnName(item.ShortName.ObjToString().ToLower() + this.Builder.SqlTranslationRight + ".")); + } + } + else if (this.EasyJoinInfos != null && this.EasyJoinInfos.Any()) + { + Check.ExceptionEasy("No Supprt Subquery.ToList(), Inner Join Or Left Join", "Subquery.ToList请使用Inner方式联表"); + } + if (this.TableShortName == null) + { + //Empty + } + else + { + var name = Builder.GetTranslationColumnName(this.TableShortName) + @"\."; + foreach (var paramter in this.SubToListParameters) + { + var regex = $@"\{Builder.SqlTranslationLeft}[\w]{{1,20}}?\{Builder.SqlTranslationRight}\.\{Builder.SqlTranslationLeft}.{{1,50}}?\{Builder.SqlTranslationRight}"; + var matches = Regex + .Matches(paramter.Value.ObjToString(), regex, RegexOptions.IgnoreCase).Cast() + .Where(it => allShortName.Any(z => it.Value.ObjToString().ToLower().Contains(z))) + .Select(it => it.Value).ToList(); + names.AddRange(matches); + } + int i = 0; + names = names.Distinct().ToList(); + if (names.Any()) + { + List colums = new List(); + foreach (var item in names) + { + result = (result + $",{item} as app_ext_col_{i}"); + colums.Add(new QueryableAppendColumn() { AsName = $"app_ext_col_{i}", Name = item, Index = i }); + i++; + } + this.AppendColumns = colums; + } + } + + return result; + } #endregion #region Get SQL Partial @@ -613,54 +662,12 @@ namespace SqlSugar } if (this.SubToListParameters!=null&& this.SubToListParameters.Any()) { - List names = new List(); - var allShortName = new List(); - allShortName.Add(this.Builder.SqlTranslationLeft+ Builder.GetNoTranslationColumnName(this.TableShortName.ObjToString().ToLower()+this.Builder.SqlTranslationRight+".")); - if (this.JoinQueryInfos.HasValue()) - { - foreach (var item in this.JoinQueryInfos) - { - allShortName.Add(this.Builder.SqlTranslationLeft + Builder.GetNoTranslationColumnName(item.ShortName.ObjToString().ToLower() + this.Builder.SqlTranslationRight + ".")); - } - } - else if (this.EasyJoinInfos!=null&& this.EasyJoinInfos.Any()) - { - Check.ExceptionEasy("No Supprt Subquery.ToList(), Inner Join Or Left Join","Subquery.ToList请使用Inner方式联表"); - } - if (this.TableShortName == null) - { - //Empty - } - else - { - var name = Builder.GetTranslationColumnName(this.TableShortName) + @"\."; - foreach (var paramter in this.SubToListParameters) - { - var regex = $@"\{Builder.SqlTranslationLeft}[\w]{{1,20}}?\{Builder.SqlTranslationRight}\.\{Builder.SqlTranslationLeft}.{{1,50}}?\{Builder.SqlTranslationRight}"; - var matches = Regex - .Matches(paramter.Value.ObjToString(), regex, RegexOptions.IgnoreCase).Cast() - .Where(it => allShortName.Any(z => it.Value.ObjToString().ToLower().Contains(z))) - .Select(it => it.Value).ToList(); - names.AddRange(matches); - } - int i = 0; - names = names.Distinct().ToList(); - if (names.Any()) - { - List colums = new List(); - foreach (var item in names) - { - result = (result + $",{item} as app_ext_col_{i}"); - colums.Add(new QueryableAppendColumn() { AsName = $"app_ext_col_{i}", Name = item, Index = i }); - i++; - } - this.AppendColumns = colums; - } - } + result = SubToListMethod(result); } return result; } } + public virtual string GetSelectValueByExpression() { var expression = this.SelectValue as Expression; diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs index b2bf88cda..36de4479b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/SqlBuilderProvider.cs @@ -389,7 +389,12 @@ namespace SqlSugar indexTree++; } - private ConditionalCollections ToConditionalCollections(ConditionalTree item,ref int indexTree, List parameters) + public virtual string RemoveParentheses(string sql) + { + return sql; + } + + private ConditionalCollections ToConditionalCollections(ConditionalTree item,ref int indexTree, List parameters) { List> list = new List>(); var index = 0; diff --git a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlBuilder.cs index 37642f870..4a17b8ac0 100644 --- a/Src/Asp.NetCore2/SqlSugar/Interface/ISqlBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Interface/ISqlBuilder.cs @@ -43,5 +43,6 @@ namespace SqlSugar KeyValuePair ConditionalModelToSql(List models, int beginIndex = 0); string GetUnionFomatSql(string sql); Type GetNullType(string tableName,string columnName); + string RemoveParentheses(string sql); } } diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteBuilder.cs index 4e085ecda..18636d55a 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteBuilder.cs @@ -22,5 +22,14 @@ namespace SqlSugar return "select DATETIME('now') "; } } + public override string RemoveParentheses(string sql) + { + if (sql.StartsWith("(") && sql.EndsWith(")")) + { + sql = sql.Substring(1, sql.Length - 2); + } + + return sql; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs index 474caac94..32199c88f 100644 --- a/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs @@ -1,4 +1,5 @@ -using System.Linq; +using MySqlX.XDevAPI.Common; +using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -68,7 +69,7 @@ namespace SqlSugar } return result; } - + #endregion #region Get SQL Partial @@ -93,6 +94,10 @@ namespace SqlSugar { reval = " DISTINCT " + reval; } + if (this.SubToListParameters != null && this.SubToListParameters.Any()) + { + reval = SubToListMethod(reval); + } return reval; } }