From e89ae94f7c464ac786a856440ef118df928727d2 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 25 Nov 2022 12:17:37 +0800 Subject: [PATCH] Optimize your code --- .../QueryableProvider/NavigatManager.cs | 113 +++++++++--------- .../SqlSugar/Utilities/CommonExtensions.cs | 4 + 2 files changed, 63 insertions(+), 54 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 6ef08f990..8d7b63abb 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -593,60 +593,7 @@ namespace SqlSugar } else if (method.Method.Name == "Select") { - var exp = method.Arguments[1]; - var newExp = (exp as LambdaExpression).Body; - var types = exp.Type.GetGenericArguments(); - if (types != null && types.Length > 0) - { - var type = types[0]; - var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type); - this.Context.InitMappingInfo(type); - Check.ExceptionEasy(newExp.Type != entityInfo.Type, $" new {newExp.Type.Name}is error ,use Select(it=>new {entityInfo.Type.Name})", $"new {newExp.Type.Name}是错误的,请使用Select(it=>new {entityInfo.Type.Name})"); - if (entityInfo.Columns.Count(x => x.Navigat != null) == 0) - { - result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString()); - } - else - { - var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey); - result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString()); - if (pkInfo != null) - { - var pkName = pkInfo.DbColumnName; - AppColumns(result, queryable, pkName); - } - foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToOne)) - { - var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name); - if (navColumn != null) - { - AppColumns(result, queryable, navColumn.DbColumnName); - } - } - foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToMany&& x.Navigat.Name2!=null)) - { - var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2); - if (navColumn != null) - { - AppColumns(result, queryable, navColumn.DbColumnName); - } - } - result.SelectString = result.SelectString.TrimStart(','); - if (result.SelectString == "") - { - result.SelectString = null; - } - } - if (properyName != null) - { - var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName); - if (fkColumnsInfo != null) - { - var fkName = fkColumnsInfo.DbColumnName; - AppColumns(result, queryable, fkName); - } - } - } + Select(properyName, result, method, queryable); } else if (method.Method.Name == "OrderByDescending") { @@ -706,6 +653,64 @@ namespace SqlSugar return result; } + private void Select(string properyName, SqlInfo result, MethodCallExpression method, ISugarQueryable queryable) + { + var exp = method.Arguments[1]; + var newExp = (exp as LambdaExpression).Body; + var types = exp.Type.GetGenericArguments(); + if (types != null && types.Length > 0) + { + var type = types[0]; + var entityInfo = this.Context.EntityMaintenance.GetEntityInfo(type); + this.Context.InitMappingInfo(type); + Check.ExceptionEasy(newExp.Type != entityInfo.Type, $" new {newExp.Type.Name}is error ,use Select(it=>new {entityInfo.Type.Name})", $"new {newExp.Type.Name}是错误的,请使用Select(it=>new {entityInfo.Type.Name})"); + if (entityInfo.Columns.Count(x => x.Navigat != null) == 0) + { + result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString()); + } + else + { + var pkInfo = entityInfo.Columns.FirstOrDefault(x => x.IsPrimarykey); + result.SelectString = (" " + queryable.QueryBuilder.GetExpressionValue(exp, ResolveExpressType.SelectSingle).GetString()); + if (pkInfo != null) + { + var pkName = pkInfo.DbColumnName; + AppColumns(result, queryable, pkName); + } + foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToOne)) + { + var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name); + if (navColumn != null) + { + AppColumns(result, queryable, navColumn.DbColumnName); + } + } + foreach (var nav in entityInfo.Columns.Where(x => x.Navigat != null && x.Navigat.NavigatType == NavigateType.OneToMany && x.Navigat.Name2 != null)) + { + var navColumn = entityInfo.Columns.FirstOrDefault(it => it.PropertyName == nav.Navigat.Name2); + if (navColumn != null) + { + AppColumns(result, queryable, navColumn.DbColumnName); + } + } + result.SelectString = result.SelectString.TrimStart(','); + if (result.SelectString == "") + { + result.SelectString = null; + } + } + if (properyName != null) + { + var fkColumnsInfo = entityInfo.Columns.FirstOrDefault(x => x.PropertyName == properyName); + if (fkColumnsInfo != null) + { + var fkName = fkColumnsInfo.DbColumnName; + AppColumns(result, queryable, fkName); + } + } + } + } + private static void SetTableShortName(SqlInfo result, ISugarQueryable queryable) { if (queryable.QueryBuilder.TableShortName.HasValue()&& result.TableShortName.IsNullOrEmpty()) diff --git a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs index 9164b2f8e..c6bfeb491 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/CommonExtensions.cs @@ -9,6 +9,10 @@ namespace SqlSugar { public static class CommonExtensions { + public static List ToList(this T thisValue,Func action) where T:class,new() + { + return new List { thisValue }; + } public static IEnumerable WhereIF(this IEnumerable thisValue, bool isOk, Func predicate) { if (isOk)