Synchronization code

This commit is contained in:
sunkaixuan 2024-02-08 15:56:36 +08:00
parent 1966680b38
commit c0503054e8

View File

@ -139,11 +139,7 @@ namespace SqlSugar
}
else if (Navigat.NavigatType == NavigateType.Dynamic)
{
Check.ExceptionEasy(
true,
" NavigateType.Dynamic no support expression . " + this.ProPertyEntity.Type.Name,
" NavigateType.Dynamic 自定义导航对象不支持在Where(x=>x.自定义.Id==1)等方法中使用" + this.ProPertyEntity.Type.Name);
return null;
return GetDynamicSql();
}
else
{
@ -151,6 +147,65 @@ namespace SqlSugar
}
}
private MapperSql GetDynamicSql()
{
if (Navigat.Name == null)
{
Check.ExceptionEasy(
true,
" NavigateType.Dynamic User-defined navigation objects need to be configured with json to be used in expressions . " + this.ProPertyEntity.Type.Name,
" NavigateType.Dynamic 自定义导航对象需要配置json才能在表达式中使用。 " + this.ProPertyEntity.Type.Name);
}
MapperSql mapper = new MapperSql();
var queryable = this.context.Queryable<object>();
//selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
if (PropertyShortName.HasValue())
{
queryable.QueryBuilder.TableShortName = PropertyShortName;
}
queryable.QueryBuilder.LambdaExpressions.ParameterIndex = 500;
var isClearFilter = false;
Type[] clearTypes = null;
if (this.methodCallExpressionResolve?.Context?.SugarContext?.QueryBuilder != null)
{
queryable.QueryBuilder.LambdaExpressions.ParameterIndex = 500 + this.methodCallExpressionResolve.Context.SugarContext.QueryBuilder.LambdaExpressions.ParameterIndex;
this.methodCallExpressionResolve.Context.SugarContext.QueryBuilder.LambdaExpressions.ParameterIndex++;
isClearFilter = this.methodCallExpressionResolve.Context.SugarContext.QueryBuilder.IsDisabledGobalFilter;
clearTypes = this.methodCallExpressionResolve.Context.SugarContext.QueryBuilder.RemoveFilters;
}
queryable
.AS(this.ProPertyEntity.DbTableName)
.ClearFilter(clearTypes)
.Filter(isClearFilter ? null : this.ProPertyEntity.Type)
.WhereIF(!string.IsNullOrEmpty(whereSql), whereSql);
var json = Newtonsoft.Json.Linq.JArray.Parse(Navigat.Name);
foreach (var item in json)
{
string m = item["m"] + "";
string c = item["c"] + "";
var leftName = this.EntityInfo.Columns.First(it => it.PropertyName == m).DbColumnName;
var rightName = this.ProPertyEntity.Columns.First(it => it.PropertyName == c).DbColumnName;
queryable.Where($" {queryable.SqlBuilder.GetTranslationColumnName(ShorName)}.{queryable.SqlBuilder.GetTranslationColumnName(leftName)}={queryable.SqlBuilder.GetTranslationColumnName(rightName)} ");
}
var sqlObj = queryable.ToSql();
// .Where($" {name}={queryable.QueryBuilder.Builder.GetTranslationColumnName(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 = GetMethodSql(mapper.Sql);
return mapper;
}
private MapperSql GetManyToManySql()
{