mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
Update navigate query
This commit is contained in:
parent
4cd14128ff
commit
5a8bc73124
@ -32,6 +32,13 @@ namespace OrmTest
|
||||
.Where(t => t.DeleteTime == null)
|
||||
.OrderBy(t => t.StationCode, OrderByType.Asc)
|
||||
.ToList();
|
||||
db.Aop.OnLogExecuting = (s, p) =>
|
||||
{
|
||||
Console.WriteLine(s);
|
||||
};
|
||||
var data2 = db.Queryable<StationEntity>()
|
||||
.Where(x=>x.StationConfigs.Any(z=>z.BaseStationConfig.KeyID==x.LineID))
|
||||
.ToList();
|
||||
var b1 = DateTime.Now.Subtract(b).TotalMilliseconds;
|
||||
|
||||
Console.WriteLine("#### SqlQueryable End ####");
|
||||
|
@ -53,6 +53,19 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
public static List<ParameterExpression> ExpressionParameters(Expression expression)
|
||||
{
|
||||
List<ParameterExpression> parameters = null;
|
||||
if (expression is LambdaExpression)
|
||||
{
|
||||
if ((expression as LambdaExpression).Parameters != null)
|
||||
{
|
||||
parameters = (expression as LambdaExpression).Parameters.ToList();
|
||||
}
|
||||
}
|
||||
return parameters;
|
||||
}
|
||||
|
||||
public static object GetValue(object value,ExpressionContext context)
|
||||
{
|
||||
if (value == null) return value;
|
||||
|
@ -322,6 +322,7 @@ namespace SqlSugar
|
||||
public string GetNewExpressionValue(Expression item)
|
||||
{
|
||||
var newContext = this.Context.GetCopyContextWithMapping();
|
||||
newContext.SugarContext = this.Context.SugarContext;
|
||||
newContext.Resolve(item, this.Context.IsJoin ? ResolveExpressType.WhereMultiple : ResolveExpressType.WhereSingle);
|
||||
this.Context.Index = newContext.Index;
|
||||
this.Context.ParameterIndex = newContext.ParameterIndex;
|
||||
@ -331,6 +332,19 @@ namespace SqlSugar
|
||||
}
|
||||
return newContext.Result.GetResultString();
|
||||
}
|
||||
public string GetNewExpressionValue(Expression item,ResolveExpressType type)
|
||||
{
|
||||
var newContext = this.Context.GetCopyContextWithMapping();
|
||||
newContext.SugarContext = this.Context.SugarContext;
|
||||
newContext.Resolve(item, type);
|
||||
this.Context.Index = newContext.Index;
|
||||
this.Context.ParameterIndex = newContext.ParameterIndex;
|
||||
if (newContext.Parameters.HasValue())
|
||||
{
|
||||
this.Context.Parameters.AddRange(newContext.Parameters);
|
||||
}
|
||||
return newContext.Result.GetResultString();
|
||||
}
|
||||
|
||||
protected void ResolveNewExpressions(ExpressionParameter parameter, Expression item, string asName)
|
||||
{
|
||||
|
@ -14,6 +14,7 @@ namespace SqlSugar
|
||||
private EntityInfo ProPertyEntity;
|
||||
private Navigate Navigat;
|
||||
public string ShorName;
|
||||
public string PropertyShortName;
|
||||
private string MemberName;
|
||||
private string MethodName;
|
||||
private string whereSql;
|
||||
@ -41,6 +42,11 @@ namespace SqlSugar
|
||||
result = ValidateNav(result, memberExp.Arguments[0] as MemberExpression, memberExp.Arguments[0]);
|
||||
if (memberExp.Arguments.Count > 1)
|
||||
{
|
||||
var pars = ExpressionTool.ExpressionParameters(memberExp.Arguments.Last());
|
||||
if (pars != null && pars.Any(z => z.Type == ProPertyEntity.Type))
|
||||
{
|
||||
PropertyShortName = pars.First(z => z.Type == ProPertyEntity.Type).Name;
|
||||
}
|
||||
whereSql = GetWhereSql(memberExp);
|
||||
}
|
||||
}
|
||||
@ -51,9 +57,17 @@ namespace SqlSugar
|
||||
private string GetWhereSql(MethodCallExpression memberExp)
|
||||
{
|
||||
var whereExp = memberExp.Arguments[1];
|
||||
var result= this.methodCallExpressionResolve.GetNewExpressionValue(whereExp);
|
||||
if (PropertyShortName.HasValue())
|
||||
{
|
||||
var result = this.methodCallExpressionResolve.GetNewExpressionValue(whereExp, ResolveExpressType.WhereMultiple);
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
var result = this.methodCallExpressionResolve.GetNewExpressionValue(whereExp);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
private bool ValidateNav(bool result, MemberExpression memberExp, Expression childExpression)
|
||||
{
|
||||
@ -129,6 +143,10 @@ namespace SqlSugar
|
||||
pk = queryable.QueryBuilder.Builder.GetTranslationColumnName(pk);
|
||||
name = queryable.QueryBuilder.Builder.GetTranslationColumnName(name);
|
||||
//selectName = queryable.QueryBuilder.Builder.GetTranslationColumnName(selectName);
|
||||
if (PropertyShortName.HasValue())
|
||||
{
|
||||
queryable.QueryBuilder.TableShortName = PropertyShortName;
|
||||
}
|
||||
mapper.Sql = queryable
|
||||
.AS(this.ProPertyEntity.DbTableName)
|
||||
.WhereIF(!string.IsNullOrEmpty(whereSql), whereSql)
|
||||
|
Loading…
Reference in New Issue
Block a user