Synchronization code

This commit is contained in:
sunkaixuan 2023-08-09 21:57:56 +08:00
parent 8b5d4135bc
commit 3723ed522e
3 changed files with 27 additions and 5 deletions

View File

@ -824,7 +824,14 @@ namespace SqlSugar
{ {
shortName = $"{Builder.GetTranslationColumnName(this.TableShortName)}."; shortName = $"{Builder.GetTranslationColumnName(this.TableShortName)}.";
} }
result += string.Join(",",this.AppendNavInfo.AppendProperties.Select(it=> shortName+Builder.GetTranslationColumnName(it.Value)+ " AS SugarNav_" + it.Key)); if (this.GroupByValue.HasValue())
{
result += string.Join(",",this.AppendNavInfo.AppendProperties.Select(it => "max(" + shortName + Builder.GetTranslationColumnName(it.Value) + ") AS SugarNav_" + it.Key));
}
else
{
result += string.Join(",", this.AppendNavInfo.AppendProperties.Select(it => shortName + Builder.GetTranslationColumnName(it.Value) + " AS SugarNav_" + it.Key));
}
} }
if (result.Contains("/**/*")) if (result.Contains("/**/*"))
{ {

View File

@ -19,6 +19,8 @@ namespace SqlSugar
try try
{ {
OneToManyNavgateExpression nav = new OneToManyNavgateExpression(this.Context?.SugarContext?.Context, this); OneToManyNavgateExpression nav = new OneToManyNavgateExpression(this.Context?.SugarContext?.Context, this);
nav.ParameterIndex = this.Context.ParameterIndex;
this.Context.ParameterIndex++;
if (nav.IsNavgate(express)) if (nav.IsNavgate(express))
{ {
var sql = nav.GetSql(); var sql = nav.GetSql();

View File

@ -18,6 +18,7 @@ namespace SqlSugar
private string MemberName; private string MemberName;
private string MethodName; private string MethodName;
private string whereSql; private string whereSql;
public int ParameterIndex = 0;
private MethodCallExpressionResolve methodCallExpressionResolve; private MethodCallExpressionResolve methodCallExpressionResolve;
public OneToManyNavgateExpression(SqlSugarProvider context, MethodCallExpressionResolve methodCallExpressionResolve) public OneToManyNavgateExpression(SqlSugarProvider context, MethodCallExpressionResolve methodCallExpressionResolve)
{ {
@ -171,7 +172,7 @@ namespace SqlSugar
var bTableName = queryable.QueryBuilder.Builder.GetTranslationTableName(this.ProPertyEntity.DbTableName); var bTableName = queryable.QueryBuilder.Builder.GetTranslationTableName(this.ProPertyEntity.DbTableName);
this.context.InitMappingInfo(mappingType); this.context.InitMappingInfo(mappingType);
var queryBuilerAB=this.context.Queryable<object>().QueryBuilder; var queryBuilerAB=this.context.Queryable<object>().QueryBuilder;
queryBuilerAB.LambdaExpressions.ParameterIndex = 100+this.methodCallExpressionResolve.Index; queryBuilerAB.LambdaExpressions.ParameterIndex = 100+this.ParameterIndex;
var filters= queryBuilerAB.GetFilters(mappingType); var filters= queryBuilerAB.GetFilters(mappingType);
if (filters.HasValue()) if (filters.HasValue())
{ {
@ -206,7 +207,7 @@ namespace SqlSugar
} }
mapper.Sql = GetMethodSql(mapper.Sql); mapper.Sql = GetMethodSql(mapper.Sql);
return mapper; return mapper;
} }
private MapperSql GetOneToManySql() private MapperSql GetOneToManySql()
{ {
var pkColumn = this.EntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey == true); var pkColumn = this.EntityInfo.Columns.FirstOrDefault(it => it.IsPrimarykey == true);
@ -228,10 +229,22 @@ namespace SqlSugar
{ {
queryable.QueryBuilder.TableShortName = PropertyShortName; queryable.QueryBuilder.TableShortName = PropertyShortName;
} }
mapper.Sql = queryable var sqlObj = queryable
.AS(this.ProPertyEntity.DbTableName) .AS(this.ProPertyEntity.DbTableName)
.Filter(this.ProPertyEntity.Type)
.WhereIF(!string.IsNullOrEmpty(whereSql), whereSql) .WhereIF(!string.IsNullOrEmpty(whereSql), whereSql)
.Where($" {name}={ShorName}.{pk} ").Select(MethodName=="Any"?"1":" COUNT(1) ").ToSql().Key; .Where($" {name}={ShorName}.{pk} ").Select(MethodName == "Any" ? "1" : " COUNT(1) ").ToSql();
if (sqlObj.Value?.Any() == true)
{
foreach (var item in sqlObj.Value)
{
if (!this.methodCallExpressionResolve.Context.Parameters.Any(it => it.ParameterName == item.ParameterName))
{
this.methodCallExpressionResolve.Context.Parameters.Add(item);
}
}
}
mapper.Sql = sqlObj.Key;
mapper.Sql = $" ({mapper.Sql}) "; mapper.Sql = $" ({mapper.Sql}) ";
mapper.Sql = GetMethodSql(mapper.Sql); mapper.Sql = GetMethodSql(mapper.Sql);
return mapper; return mapper;