mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-25 10:19:17 +08:00
Update exp to sql
This commit is contained in:
@@ -55,7 +55,7 @@ namespace OrmTest
|
||||
var list2 = db.Queryable<StudentA>()
|
||||
.Includes(x => x.SchoolA, x => x.RoomList)//2个参数就是 then Include
|
||||
.Includes(x => x.Books)
|
||||
.Where(x=>x.Books.Any())
|
||||
.Where(x=>x.Books.Any(z=>z.BookId==1))
|
||||
.Where(x => x.SchoolA.SchoolName == "北大")
|
||||
.ToList();
|
||||
|
||||
|
||||
@@ -319,7 +319,7 @@ namespace SqlSugar
|
||||
return methodCallExpressionArgs;
|
||||
}
|
||||
|
||||
protected string GetNewExpressionValue(Expression item)
|
||||
public string GetNewExpressionValue(Expression item)
|
||||
{
|
||||
var newContext = this.Context.GetCopyContextWithMapping();
|
||||
newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle);
|
||||
|
||||
@@ -244,7 +244,7 @@ namespace SqlSugar
|
||||
{
|
||||
try
|
||||
{
|
||||
OneToManyNavgateExpression nav=new OneToManyNavgateExpression(this.Context?.SugarContext?.Context);
|
||||
OneToManyNavgateExpression nav=new OneToManyNavgateExpression(this.Context?.SugarContext?.Context,this);
|
||||
if (nav.IsNavgate(express))
|
||||
{
|
||||
var sql = nav.GetSql();
|
||||
|
||||
@@ -16,9 +16,12 @@ namespace SqlSugar
|
||||
public string ShorName;
|
||||
private string MemberName;
|
||||
private string MethodName;
|
||||
public OneToManyNavgateExpression(SqlSugarProvider context)
|
||||
private string whereSql;
|
||||
private MethodCallExpressionResolve methodCallExpressionResolve;
|
||||
public OneToManyNavgateExpression(SqlSugarProvider context, MethodCallExpressionResolve methodCallExpressionResolve)
|
||||
{
|
||||
this.context = context;
|
||||
this.methodCallExpressionResolve = methodCallExpressionResolve;
|
||||
}
|
||||
|
||||
internal bool IsNavgate(Expression expression)
|
||||
@@ -36,11 +39,22 @@ namespace SqlSugar
|
||||
if (memberExp.Method.Name.IsIn("Any","Count") && memberExp.Arguments.Count>0 && memberExp.Arguments[0] is MemberExpression )
|
||||
{
|
||||
result = ValidateNav(result, memberExp.Arguments[0] as MemberExpression, memberExp.Arguments[0]);
|
||||
if (memberExp.Arguments.Count > 1)
|
||||
{
|
||||
whereSql = GetWhereSql(memberExp);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private string GetWhereSql(MethodCallExpression memberExp)
|
||||
{
|
||||
var whereExp = memberExp.Arguments[1];
|
||||
var result= this.methodCallExpressionResolve.GetNewExpressionValue(whereExp);
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool ValidateNav(bool result, MemberExpression memberExp, Expression childExpression)
|
||||
{
|
||||
if (childExpression != null && childExpression is MemberExpression)
|
||||
@@ -90,6 +104,7 @@ namespace SqlSugar
|
||||
selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
|
||||
mapper.Sql = queryable
|
||||
.AS(this.ProPertyEntity.DbTableName)
|
||||
.WhereIF(!string.IsNullOrEmpty(whereSql),whereSql)
|
||||
.Where($" {ShorName}.{name}={pk} ").Select(selectName).ToSql().Key;
|
||||
mapper.Sql = $" ({mapper.Sql}) ";
|
||||
mapper.Sql = GetMethodSql(mapper.Sql);
|
||||
@@ -107,6 +122,7 @@ namespace SqlSugar
|
||||
//selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
|
||||
mapper.Sql = queryable
|
||||
.AS(this.ProPertyEntity.DbTableName)
|
||||
.WhereIF(!string.IsNullOrEmpty(whereSql), whereSql)
|
||||
.Where($" {name}={ShorName}.{pk} ").Select(" COUNT(1) ").ToSql().Key;
|
||||
mapper.Sql = $" ({mapper.Sql}) ";
|
||||
mapper.Sql = GetMethodSql(mapper.Sql);
|
||||
|
||||
Reference in New Issue
Block a user