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