From aa88be7e9323911e000815f77f3831dab4ab78d1 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Wed, 3 May 2023 23:29:08 +0800 Subject: [PATCH] db.Queryable.Includes.Select.ToList --- .../DbBindProvider/DbBindAccessory.cs | 11 +++++++++ .../Entities/AppendNavInfoList.cs | 9 ++++++-- .../QueryableProvider/QueryableHelper.cs | 23 +++++++++++++++++-- .../SqlBuilderProvider/QueryBuilder.cs | 5 ++++ .../MemberInitExpressionResolve.cs | 4 ++++ 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs index 4575c47e4..33d184e1b 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/DbBindProvider/DbBindAccessory.cs @@ -149,6 +149,17 @@ namespace SqlSugar } QueryBuilder.AppendValues.Add(addItems); } + if (QueryBuilder?.AppendNavInfo != null) + { + var navResult = new AppendNavResult(); + foreach (var item in QueryBuilder?.AppendNavInfo.AppendProperties) + { + var vi = dataReader.GetOrdinal(item.Key); + var value = dataReader.GetValue(vi); + navResult.result.Add("SugarNav_"+item.Key,value); + } + QueryBuilder?.AppendNavInfo.Result.Add(navResult); + } } private List GetDataReaderNames(IDataReader dataReader,ref string types) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/Entities/AppendNavInfoList.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/Entities/AppendNavInfoList.cs index a8beb1c50..f190ff324 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/Entities/AppendNavInfoList.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/Entities/AppendNavInfoList.cs @@ -7,8 +7,13 @@ namespace SqlSugar { internal class AppendNavInfo { - public Dictionary MappingNavProperties = new Dictionary(); - public Dictionary AppendProperties = new Dictionary(); + public Dictionary MappingNavProperties { get; set; }= new Dictionary(); + public Dictionary AppendProperties { get; set; }= new Dictionary(); + public List Result { get; set; } =new List(); + } + internal class AppendNavResult + { + public Dictionary result = new Dictionary(); } internal class MappingNavColumnInfo { diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index da32e6f05..76f070a32 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -638,12 +638,24 @@ namespace SqlSugar var manager =it; var p= it.GetType().GetProperty("RootList"); var tType = it.GetType().GenericTypeArguments[0]; + var columns = this.Context.EntityMaintenance.GetEntityInfo(tType).Columns; var listType = typeof(List<>).MakeGenericType(tType); var outList = Activator.CreateInstance(listType); p.SetValue(it, outList); + var index = 0; foreach (var item in result) { - (outList as IList).Add(Activator.CreateInstance(tType)); + var addItem = Activator.CreateInstance(tType); + var appendResult=this.QueryBuilder.AppendNavInfo.Result[index]; + foreach (var kv in appendResult.result) + { + + var propertyName=kv.Key.Replace("SugarNav_", ""); + var propertyInfo = columns.First(i => i.PropertyName == propertyName).PropertyInfo; + propertyInfo.SetValue(addItem, kv.Value); + } + (outList as IList).Add(addItem); + index++; } it.GetType().GetMethod("Execute").Invoke(it,null); } @@ -1657,7 +1669,14 @@ namespace SqlSugar asyncQueryableBuilder.AppendColumns = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AppendColumns); asyncQueryableBuilder.AppendValues = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AppendValues); asyncQueryableBuilder.RemoveFilters = this.QueryBuilder.RemoveFilters?.ToArray(); - asyncQueryableBuilder.AppendNavInfo = this.Context.Utilities.TranslateCopy(this.QueryBuilder.AppendNavInfo); + if (this.QueryBuilder.AppendNavInfo != null) + { + asyncQueryableBuilder.AppendNavInfo = new AppendNavInfo() + { + AppendProperties= this.QueryBuilder.AppendNavInfo.AppendProperties.ToDictionary(it => it.Key, it => it.Value), + MappingNavProperties= this.QueryBuilder.AppendNavInfo.MappingNavProperties.ToDictionary(it=>it.Key,it=>it.Value) + } ; + } } private static JoinQueryInfo CopyJoinInfo(JoinQueryInfo it) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 4eb32d52f..4dfbeae15 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -806,6 +806,11 @@ namespace SqlSugar { return "*"; } + if (this.AppendNavInfo?.AppendProperties?.Any() ==true) + { + result += ","; + result += string.Join(",",this.AppendNavInfo.AppendProperties.Select(it=>it.Value+ " AS SugarNav_" + it.Key)); + } if (result.Contains("/**/*")) { return result.Replace("/**/*", ""); diff --git a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs index c2719f740..ee9ebd188 100644 --- a/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs +++ b/Src/Asp.NetCore2/SqlSugar/ExpressionsToSql/ResolveItems/MemberInitExpressionResolve.cs @@ -311,6 +311,10 @@ namespace SqlSugar } MemberAssignment memberAssignment = (MemberAssignment)binding; var memberName = memberAssignment.Member.Name; + if (this.Context?.SugarContext?.QueryBuilder?.AppendNavInfo?.MappingNavProperties?.ContainsKey(memberName) == true) + { + continue; + } var item = memberAssignment.Expression; if (item.Type.IsClass()&& item is MemberExpression &&(item as MemberExpression).Expression is ParameterExpression) {