From 43df2fa76201e0ae411aa8465a07482964d5d7e7 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 11 May 2023 12:36:08 +0800 Subject: [PATCH] Update queryable.ToDictionary --- .../QueryableProvider/QueryableExecuteSql.cs | 13 +++++++++++-- .../QueryableProvider/QueryableExecuteSqlAsync.cs | 13 +++++++++++-- Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs | 10 ++++++++++ 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs index 285364c01..aaf629931 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSql.cs @@ -410,8 +410,17 @@ namespace SqlSugar keyName = this.QueryBuilder.TableShortName + "." + keyName; valueName = this.QueryBuilder.TableShortName + "." + valueName; } - var result = this.Select>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value); - return result; + var isJson=this.Context.EntityMaintenance.GetEntityInfo().Columns.Where(it => it.IsJson && it.PropertyName == ExpressionTool.GetMemberName(value)).Any(); + if (isJson) + { + var result = this.Select(keyName + "," + valueName).ToList().ToDictionary(ExpressionTool.GetMemberName(key), ExpressionTool.GetMemberName(value)); + return result; + } + else + { + var result = this.Select>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value); + return result; + } } public List> ToDictionaryList() diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs index 852c0380c..e4c2161e1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableExecuteSqlAsync.cs @@ -559,8 +559,17 @@ ParameterT parameter) var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString(); var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString(); var list = await this.Select>(keyName + "," + valueName).ToListAsync(); - var result = list.ToDictionary(it => it.Key.ObjToString(), it => it.Value); - return result; + var isJson = this.Context.EntityMaintenance.GetEntityInfo().Columns.Where(it => it.IsJson && it.PropertyName == ExpressionTool.GetMemberName(value)).Any(); + if (isJson) + { + var result = this.Select(keyName + "," + valueName).ToList().ToDictionary(ExpressionTool.GetMemberName(key), ExpressionTool.GetMemberName(value)); + return result; + } + else + { + var result = list.ToDictionary(it => it.Key.ObjToString(), it => it.Value); + return result; + } } public async Task> ToTreeAsync(Expression>> childListExpression, Expression> parentIdExpression, object rootValue, object[] childIds) { diff --git a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs index ead48e00a..61c5b8c6b 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs @@ -11,6 +11,16 @@ namespace SqlSugar { public static class CommonExtensions { + public static Dictionary ToDictionary(this List list, string keyPropertyName, string valuePropertyName) + { + var keyProperty = typeof(T).GetProperty(keyPropertyName); + var valueProperty = typeof(T).GetProperty(valuePropertyName); + + return list.ToDictionary( + item => keyProperty.GetValue(item)+"", + item => valueProperty.GetValue(item) + ); + } public static MethodInfo GetMyMethod(this Type type,string name, int argCount) { return type.GetMethods().FirstOrDefault(it => it.Name == name && it.GetParameters().Length == argCount);