mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-24 07:22:57 +08:00
Update exp to sql
This commit is contained in:
parent
5dec2c662d
commit
ac7df08ad5
@ -39,7 +39,7 @@ namespace SqlSugar
|
|||||||
.Rows.Cast<System.Data.DataRow>().Select(it => it[0]).ToList();
|
.Rows.Cast<System.Data.DataRow>().Select(it => it[0]).ToList();
|
||||||
|
|
||||||
|
|
||||||
var childList = this._Context.Queryable<TChild>().In(thisPkColumn.DbColumnName, bids).ToList();
|
var childList = GetChildList<TChild>().In(thisPkColumn.DbColumnName, bids).ToList();
|
||||||
|
|
||||||
|
|
||||||
if (IsDeleteB())
|
if (IsDeleteB())
|
||||||
|
@ -28,8 +28,8 @@ namespace SqlSugar
|
|||||||
SetContext(() => this._Context.Deleteable(prentList).ExecuteCommand());
|
SetContext(() => this._Context.Deleteable(prentList).ExecuteCommand());
|
||||||
|
|
||||||
var ids = _ParentList.Select(it => parentPkColumn.PropertyInfo.GetValue(it)).ToList();
|
var ids = _ParentList.Select(it => parentPkColumn.PropertyInfo.GetValue(it)).ToList();
|
||||||
var childList = this._Context.Queryable<TChild>().In(thisFkColumn.DbColumnName, ids).ToList();
|
var childList = GetChildList<TChild>().In(thisFkColumn.DbColumnName, ids).ToList();
|
||||||
|
|
||||||
this._ParentList = childList.Cast<object>().ToList();
|
this._ParentList = childList.Cast<object>().ToList();
|
||||||
this._ParentPkColumn = thisPkColumn;
|
this._ParentPkColumn = thisPkColumn;
|
||||||
this._IsDeletedParant = true;
|
this._IsDeletedParant = true;
|
||||||
@ -37,6 +37,20 @@ namespace SqlSugar
|
|||||||
SetContext(() => this._Context.Deleteable(childList).ExecuteCommand());
|
SetContext(() => this._Context.Deleteable(childList).ExecuteCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ISugarQueryable<TChild> GetChildList<TChild>() where TChild : class, new()
|
||||||
|
{
|
||||||
|
var queryable = this._Context.Queryable<TChild>();
|
||||||
|
if (_WhereList.HasValue())
|
||||||
|
{
|
||||||
|
foreach (var item in _WhereList)
|
||||||
|
{
|
||||||
|
queryable.Where(item);
|
||||||
|
}
|
||||||
|
queryable.AddParameters(_Parameters);
|
||||||
|
}
|
||||||
|
return queryable;
|
||||||
|
}
|
||||||
|
|
||||||
private void SetContext(Action action)
|
private void SetContext(Action action)
|
||||||
{
|
{
|
||||||
var key = "_DeleteNavTask";
|
var key = "_DeleteNavTask";
|
||||||
|
@ -17,11 +17,13 @@ namespace SqlSugar
|
|||||||
public EntityColumnInfo _ParentPkColumn { get; set; }
|
public EntityColumnInfo _ParentPkColumn { get; set; }
|
||||||
public SqlSugarProvider _Context { get; set; }
|
public SqlSugarProvider _Context { get; set; }
|
||||||
public bool _IsDeletedParant { get; set; }
|
public bool _IsDeletedParant { get; set; }
|
||||||
|
public List<string> _WhereList = new List<string>();
|
||||||
|
public List<SugarParameter> _Parameters = new List<SugarParameter>();
|
||||||
public DeleteNavProvider<Root, TChild> ThenInclude< TChild>(Expression<Func<T, TChild>> expression)
|
public DeleteNavProvider<Root, TChild> ThenInclude< TChild>(Expression<Func<T, TChild>> expression)
|
||||||
where TChild : class, new()
|
where TChild : class, new()
|
||||||
{
|
{
|
||||||
InitParentList();
|
InitParentList();
|
||||||
|
Expression newExp = GetMamber(expression);
|
||||||
var name = ExpressionTool.GetMemberName(expression);
|
var name = ExpressionTool.GetMemberName(expression);
|
||||||
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
||||||
if (nav.Navigat == null)
|
if (nav.Navigat == null)
|
||||||
@ -47,7 +49,8 @@ namespace SqlSugar
|
|||||||
where TChild : class, new()
|
where TChild : class, new()
|
||||||
{
|
{
|
||||||
InitParentList();
|
InitParentList();
|
||||||
var name = ExpressionTool.GetMemberName(expression);
|
Expression newExp = GetMamber(expression);
|
||||||
|
var name = ExpressionTool.GetMemberName(newExp);
|
||||||
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
||||||
if (nav.Navigat == null)
|
if (nav.Navigat == null)
|
||||||
{
|
{
|
||||||
@ -67,6 +70,61 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
return GetResult<TChild>();
|
return GetResult<TChild>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Expression GetMamber(Expression expression)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
Expression newExp =ExpressionTool.GetLambdaExpressionBody(expression);
|
||||||
|
while (newExp is MethodCallExpression)
|
||||||
|
{
|
||||||
|
var callMethod = (newExp as MethodCallExpression);
|
||||||
|
ActionMethodCallExpression(callMethod);
|
||||||
|
newExp = callMethod.Arguments[0];
|
||||||
|
i++;
|
||||||
|
Check.Exception(i > 10000, expression + " is error");
|
||||||
|
}
|
||||||
|
return newExp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void ActionMethodCallExpression(MethodCallExpression method)
|
||||||
|
{
|
||||||
|
var queryBuilder = GetQueryBuilder();
|
||||||
|
NavigatManager<T> navigatManager = new NavigatManager<T>()
|
||||||
|
{
|
||||||
|
Context = this._Context
|
||||||
|
};
|
||||||
|
if (method.Method.Name == "ToList")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (method.Method.Name == "Where")
|
||||||
|
{
|
||||||
|
navigatManager.CheckHasRootShortName(method.Arguments[0], method.Arguments[1]);
|
||||||
|
var exp = method.Arguments[1];
|
||||||
|
_WhereList.Add(" " + queryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString());
|
||||||
|
}
|
||||||
|
else if (method.Method.Name == "WhereIF")
|
||||||
|
{
|
||||||
|
var isOk = LambdaExpression.Lambda(method.Arguments[1]).Compile().DynamicInvoke();
|
||||||
|
if (isOk.ObjToBool())
|
||||||
|
{
|
||||||
|
var exp = method.Arguments[2];
|
||||||
|
navigatManager.CheckHasRootShortName(method.Arguments[1], method.Arguments[2]);
|
||||||
|
_WhereList.Add(" " + queryBuilder.GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (queryBuilder.Parameters != null)
|
||||||
|
{
|
||||||
|
_Parameters.AddRange(queryBuilder.Parameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private QueryBuilder GetQueryBuilder()
|
||||||
|
{
|
||||||
|
return this._Context.Queryable<T>().QueryBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
private DeleteNavProvider<Root, TChild> GetResult<TChild>() where TChild : class, new()
|
private DeleteNavProvider<Root, TChild> GetResult<TChild>() where TChild : class, new()
|
||||||
{
|
{
|
||||||
return new DeleteNavProvider<Root, TChild>()
|
return new DeleteNavProvider<Root, TChild>()
|
||||||
|
@ -649,7 +649,7 @@ namespace SqlSugar
|
|||||||
result.SelectString = result.SelectString + "," + selectPkName;
|
result.SelectString = result.SelectString + "," + selectPkName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void CheckHasRootShortName(Expression rootExpression, Expression childExpression)
|
public void CheckHasRootShortName(Expression rootExpression, Expression childExpression)
|
||||||
{
|
{
|
||||||
var rootShortName = GetShortName(rootExpression);
|
var rootShortName = GetShortName(rootExpression);
|
||||||
if (rootShortName.HasValue()&& childExpression.ToString().Contains($" {rootShortName}."))
|
if (rootShortName.HasValue()&& childExpression.ToString().Contains($" {rootShortName}."))
|
||||||
|
@ -91,6 +91,19 @@ namespace SqlSugar
|
|||||||
else
|
else
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Expression GetLambdaExpressionBody(Expression expression)
|
||||||
|
{
|
||||||
|
Expression newExp = expression;
|
||||||
|
if (newExp is LambdaExpression)
|
||||||
|
{
|
||||||
|
newExp = (newExp as LambdaExpression).Body;
|
||||||
|
}
|
||||||
|
|
||||||
|
return newExp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Type GetMemberInfoType(MemberInfo member)
|
public static Type GetMemberInfoType(MemberInfo member)
|
||||||
{
|
{
|
||||||
switch (member.MemberType)
|
switch (member.MemberType)
|
||||||
|
Loading…
Reference in New Issue
Block a user