From 1882164dc9e5c0002600dda43c2eed7dce25ad4b Mon Sep 17 00:00:00 2001 From: dangzhenjiuhao <774070829@qq.com> Date: Mon, 13 Oct 2025 19:05:49 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=AF=BC=E8=88=AA=E7=89=B9=E6=80=A7Navigate?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0QueryPropertyNames=E5=B1=9E=E6=80=A7=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=9F=A5=E8=AF=A2=E6=8C=87=E5=AE=9A=E5=88=97?= =?UTF-8?q?=202.NavigatManager=E5=AE=9E=E7=8E=B0=E7=B1=BB=E7=9A=84OneTo?= =?UTF-8?q?One=E3=80=81OneToMany=E3=80=81ManyToMany=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=B8=AD=E8=8E=B7=E5=8F=96=E5=88=97=E6=97=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QueryableProvider/NavigatManager.cs | 33 +++++++++++++++++++ .../Entities/Mapping/SugarMappingAttribute.cs | 27 +++++++++++---- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs index 30f965836..487134c82 100644 --- a/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs +++ b/Src/Asp.NetCore2/SqlSugar/Abstract/QueryableProvider/NavigatManager.cs @@ -271,7 +271,11 @@ namespace SqlSugar var sql = GetWhereSql(GetCrossDatabase(abDb, bEntity)); if (sql.SelectString == null) { + //加载指定列 + var manualPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = bEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(manualPropertyNames != null && manualPropertyNames.Length > 0, it => manualPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToManySelectByColumnInfo(it, abDb)).ToList(); sql.SelectString = String.Join(",", columns); } @@ -433,7 +437,11 @@ namespace SqlSugar var sqlObj = GetWhereSql(db, navObjectNameColumnInfo.Navigat.Name); if (sqlObj.SelectString == null) { + // 加载指定列 + var queryPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(queryPropertyNames != null && queryPropertyNames.Length > 0, it => queryPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToOneSelectByColumnInfo(it, db)).ToList(); sqlObj.SelectString = String.Join(",", columns); } @@ -581,7 +589,10 @@ namespace SqlSugar { if (sqlObj.SelectString == null) { + //加载指定列 + var manualPropertyNames = GetQueryPropertyNames(navObjectNamePropety); var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(manualPropertyNames != null && manualPropertyNames.Length > 0, it => manualPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToManySelectByColumnInfo(it, childDb)).ToList(); sqlObj.SelectString = String.Join(",", columns); } @@ -699,7 +710,11 @@ namespace SqlSugar { if (sqlObj.SelectString == null) { + //加载指定列 + var manualPropertyNames = GetQueryPropertyNames(navObjectNamePropety); + var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore) + .WhereIF(manualPropertyNames != null && manualPropertyNames.Length > 0, it => manualPropertyNames.Contains(it.PropertyName)) .Select(it => GetOneToManySelectByColumnInfo(it,childDb)).ToList(); sqlObj.SelectString = String.Join(",", columns); } @@ -1252,5 +1267,23 @@ namespace SqlSugar return QueryBuilder.Builder.GetTranslationColumnName(it.DbColumnName) + " AS " + QueryBuilder.Builder.GetTranslationColumnName(it.PropertyName); } + /// + /// 获取查询的属性名称列表 + /// + /// + /// + private string[] GetQueryPropertyNames(System.Reflection.PropertyInfo navObjectNamePropety) + { + string[] queryPropertyNames = null; + if (navObjectNamePropety != null) + { + var navAttr = navObjectNamePropety.GetCustomAttribute(); + if (navAttr != null && navAttr.QueryPropertyNames != null && navAttr.QueryPropertyNames.Length > 0) + { + queryPropertyNames = navAttr.QueryPropertyNames; + } + } + return queryPropertyNames; + } } } diff --git a/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs b/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs index bf6657e5f..1e7dce3f1 100644 --- a/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs +++ b/Src/Asp.NetCore2/SqlSugar/Entities/Mapping/SugarMappingAttribute.cs @@ -243,6 +243,15 @@ namespace SqlSugar internal string BClassId { get; set; } + /// + /// 用于查询指定列 + /// + internal string[] QueryPropertyNames { get; set; } + public string[] GetQueryPropertyNames() + { + return QueryPropertyNames; + } + public string GetName() { return Name; @@ -272,36 +281,40 @@ namespace SqlSugar { return WhereSql; } - public Navigate(NavigateType navigatType,string ifSingleMasterTableColumn_IfListChildTableColumn) + public Navigate(NavigateType navigatType,string ifSingleMasterTableColumn_IfListChildTableColumn, string[] queryPropertyNames = null) { this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.NavigatType = navigatType; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn) + public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string[] queryPropertyNames = null) { Check.ExceptionEasy(navigatType == NavigateType.ManyToMany, "Correct usage [Navigate(typeof(ABMapping), nameof(abmapping.aid), nameof(abmapp.bid))], incorrect usage: [Navigate(Navigate.ManyToMany, nameof(ABMapping.Aid), nameof(ABMapping.BId))]", "多对多第一个参数是Type不是NavigateType,正确用法[Navigate(typeof(ABMapping), nameof(ABMapping.Aid), nameof(ABMapping.BId))],错误用法:[Navigate(Navigate.ManyToMany, nameof(ABMapping.Aid), nameof(ABMapping.BId))]"); this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.Name2 = ifSingleChildTableColumn_IfListMasterTableColumn; this.NavigatType = navigatType; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string whereSql) + public Navigate(NavigateType navigatType, string ifSingleMasterTableColumn_IfListChildTableColumn, string ifSingleChildTableColumn_IfListMasterTableColumn, string whereSql, string[] queryPropertyNames = null) { this.Name = ifSingleMasterTableColumn_IfListChildTableColumn; this.Name2 = ifSingleChildTableColumn_IfListMasterTableColumn; this.NavigatType = navigatType; this.WhereSql = whereSql; + this.QueryPropertyNames = queryPropertyNames; //Check.ExceptionEasy(navigatType != NavigateType.OneToOne, "Currently, only one-to-one navigation configuration Sql conditions are supported", "目前导航配置Sql条件只支持一对一"); } - public Navigate(Type MappingTableType,string typeAId,string typeBId) + public Navigate(Type MappingTableType,string typeAId,string typeBId, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = typeAId; this.MappingBId = typeBId; this.NavigatType = NavigateType.ManyToMany; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(Type MappingTableType, string mappingAId, string mappingBId,string aClassId,string bClassId) + public Navigate(Type MappingTableType, string mappingAId, string mappingBId,string aClassId,string bClassId, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = mappingAId; @@ -309,14 +322,16 @@ namespace SqlSugar this.AClassId = aClassId; this.BClassId = bClassId; this.NavigatType = NavigateType.ManyToMany; + this.QueryPropertyNames = queryPropertyNames; } - public Navigate(Type MappingTableType, string typeAiD, string typeBId,string mappingSql) + public Navigate(Type MappingTableType, string typeAiD, string typeBId,string mappingSql, string[] queryPropertyNames = null) { this.MappingType = MappingTableType; this.MappingAId = typeAiD; this.MappingBId = typeBId; this.NavigatType = NavigateType.ManyToMany; this.WhereSql+= mappingSql; + this.QueryPropertyNames = queryPropertyNames; } } -- Gitee