mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-04-24 18:04:52 +08:00
Subquery in Subquery BUG
This commit is contained in:
parent
87e7299005
commit
d8e0bca1c8
@ -128,6 +128,18 @@ namespace OrmTest.Demo
|
||||
name = it.Name,
|
||||
id = SqlFunc.Subqueryable<Student>().WhereIF(!string.IsNullOrEmpty(name), s => s.Id == 1).Min(s => s.Id)
|
||||
}).ToList();
|
||||
|
||||
var getAll666666 = db.Queryable<Student>()
|
||||
.Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.Id).Any())
|
||||
.Select(it =>
|
||||
new
|
||||
{
|
||||
name = it.Name,
|
||||
id = SqlFunc.Subqueryable<Student>().Where(s=>s.Id==SqlFunc.Subqueryable<School>().Where(y=>y.Id==s.SchoolId).Select(y=>y.Id)).Min(s => s.Id),
|
||||
id2 = SqlFunc.Subqueryable<Student>().Where(s => s.Id == SqlFunc.Subqueryable<School>().Where(y => y.Id == s.SchoolId).Select(y => y.Id)).Min(s => s.Id)
|
||||
}).ToList();
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void Async()
|
||||
|
@ -35,6 +35,7 @@ namespace SqlSugar
|
||||
_DbMehtods = value;
|
||||
}
|
||||
}
|
||||
public int SubQueryIndex { get; set; }
|
||||
public int Index { get; set; }
|
||||
public int ParameterIndex { get; set; }
|
||||
public string SingleTableNameSubqueryShortName{ get; set; }
|
||||
|
@ -42,7 +42,7 @@ namespace SqlSugar
|
||||
var argExp = exp.Arguments[0];
|
||||
var result = "AND " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.WhereMultiple);
|
||||
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -50,7 +50,11 @@ namespace SqlSugar
|
||||
this.Context.InitMappingInfo(entityType);
|
||||
this.Context.RefreshMapping();
|
||||
}
|
||||
return "FROM "+this.Context.GetTranslationTableName(name, true);
|
||||
var result= "FROM "+this.Context.GetTranslationTableName(name, true);
|
||||
if (this.Context.SubQueryIndex > 0) {
|
||||
result += " subTableIndex"+this.Context.SubQueryIndex;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ namespace SqlSugar
|
||||
var argExp = exp.Arguments[0];
|
||||
var result = "GROUP BY " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle);
|
||||
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ namespace SqlSugar
|
||||
}
|
||||
var result = "MAX(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple) + ")";
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ namespace SqlSugar
|
||||
}
|
||||
var result = "MIN(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple) + ")";
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ namespace SqlSugar
|
||||
var argExp = exp.Arguments[0];
|
||||
var result = "ORDER BY " + SubTools.GetMethodValue(this.Context, argExp, ResolveExpressType.FieldSingle);
|
||||
var selfParameterName = this.Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,7 @@ namespace SqlSugar
|
||||
}
|
||||
var result = "SUM(" + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple)+")";
|
||||
var selfParameterName = Context.GetTranslationColumnName(parametres.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ namespace SqlSugar
|
||||
var argExp= exp.Arguments[0];
|
||||
var result= "WHERE "+SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple);;
|
||||
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name)+UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName,string.Empty);
|
||||
result = result.Replace(selfParameterName,SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ namespace SqlSugar
|
||||
var argExp = exp.Arguments[1];
|
||||
var result = "WHERE " + SubTools.GetMethodValue(Context, argExp, ResolveExpressType.WhereMultiple); ;
|
||||
var selfParameterName = Context.GetTranslationColumnName((argExp as LambdaExpression).Parameters.First().Name) + UtilConstants.Dot;
|
||||
result = result.Replace(selfParameterName, string.Empty);
|
||||
result = result.Replace(selfParameterName, SubTools.GetSubReplace(this.Context));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -52,11 +52,15 @@ namespace SqlSugar
|
||||
Check.Exception(true, "I'm sorry I can't parse the current expression");
|
||||
}
|
||||
}
|
||||
var subIndex = this.context.SubQueryIndex;
|
||||
while (currentExpression != null)
|
||||
{
|
||||
var addItem = currentExpression.Object as MethodCallExpression;
|
||||
if (addItem != null)
|
||||
allMethods.Add(addItem);
|
||||
if (subIndex==this.context.SubQueryIndex&&addItem !=null&&addItem.Arguments.HasValue()&&addItem.Arguments.Any(it=>it.ToString().Contains("Subqueryable()"))) {
|
||||
this.context.SubQueryIndex++;
|
||||
}
|
||||
currentExpression = addItem;
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,14 @@ namespace SqlSugar
|
||||
};
|
||||
}
|
||||
|
||||
public static string GetSubReplace(ExpressionContext context)
|
||||
{
|
||||
if (context.SubQueryIndex == 0)
|
||||
return string.Empty;
|
||||
else
|
||||
return "subTableIndex"+context.SubQueryIndex+".";
|
||||
}
|
||||
|
||||
public static List<ISubOperation> SubItemsConst = SubItems(null);
|
||||
|
||||
public static string GetMethodValue(ExpressionContext context, Expression item, ResolveExpressType type)
|
||||
|
Loading…
Reference in New Issue
Block a user