mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-08 02:14:53 +08:00
Update .net core project
This commit is contained in:
@@ -39,7 +39,7 @@ namespace SqlSugar
|
||||
.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())
|
||||
|
||||
@@ -28,8 +28,8 @@ namespace SqlSugar
|
||||
SetContext(() => this._Context.Deleteable(prentList).ExecuteCommand());
|
||||
|
||||
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._ParentPkColumn = thisPkColumn;
|
||||
this._IsDeletedParant = true;
|
||||
@@ -37,6 +37,20 @@ namespace SqlSugar
|
||||
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)
|
||||
{
|
||||
var key = "_DeleteNavTask";
|
||||
|
||||
@@ -17,11 +17,13 @@ namespace SqlSugar
|
||||
public EntityColumnInfo _ParentPkColumn { get; set; }
|
||||
public SqlSugarProvider _Context { 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)
|
||||
where TChild : class, new()
|
||||
{
|
||||
InitParentList();
|
||||
Expression newExp = GetMamber(expression);
|
||||
var name = ExpressionTool.GetMemberName(expression);
|
||||
var nav = this._ParentEntity.Columns.FirstOrDefault(x => x.PropertyName == name);
|
||||
if (nav.Navigat == null)
|
||||
@@ -47,7 +49,8 @@ namespace SqlSugar
|
||||
where TChild : class, new()
|
||||
{
|
||||
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);
|
||||
if (nav.Navigat == null)
|
||||
{
|
||||
@@ -67,6 +70,61 @@ namespace SqlSugar
|
||||
}
|
||||
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()
|
||||
{
|
||||
return new DeleteNavProvider<Root, TChild>()
|
||||
|
||||
@@ -222,7 +222,7 @@ namespace SqlSugar
|
||||
CSharpTypeName = bColumn.PropertyInfo.PropertyType.Name
|
||||
}));
|
||||
var sql = GetWhereSql();
|
||||
var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString));
|
||||
var bList = selector(this.Context.Queryable<object>().AS(bEntityInfo.DbTableName).Filter(bEntityInfo.Type).AddParameters(sql.Parameters).Where(conditionalModels2).WhereIF(sql.WhereString.HasValue(),sql.WhereString).Select(sql.SelectString).OrderByIF(sql.OrderByString.HasValue(),sql.OrderByString));
|
||||
if (bList.HasValue())
|
||||
{
|
||||
foreach (var listItem in list)
|
||||
@@ -371,7 +371,7 @@ namespace SqlSugar
|
||||
|
||||
if (list.Any() && navObjectNamePropety.GetValue(list.First()) == null)
|
||||
{
|
||||
var navList = selector(this.Context.Queryable<object>().AS(navEntityInfo.DbTableName).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
|
||||
var navList = selector(this.Context.Queryable<object>().AS(navEntityInfo.DbTableName).Filter(navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
|
||||
if (navList.HasValue())
|
||||
{
|
||||
//var setValue = navList
|
||||
@@ -649,7 +649,7 @@ namespace SqlSugar
|
||||
result.SelectString = result.SelectString + "," + selectPkName;
|
||||
}
|
||||
}
|
||||
private void CheckHasRootShortName(Expression rootExpression, Expression childExpression)
|
||||
public void CheckHasRootShortName(Expression rootExpression, Expression childExpression)
|
||||
{
|
||||
var rootShortName = GetShortName(rootExpression);
|
||||
if (rootShortName.HasValue()&& childExpression.ToString().Contains($" {rootShortName}."))
|
||||
|
||||
@@ -193,7 +193,15 @@ namespace SqlSugar
|
||||
_Filter(FilterName, isDisabledGobalFilter);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISugarQueryable<T> Filter(Type type)
|
||||
{
|
||||
var whereString= QueryBuilder.GetFilters(type);
|
||||
if (whereString.HasValue())
|
||||
{
|
||||
this.Where(whereString);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public virtual ISugarQueryable<T> Mapper(Action<T> mapperAction)
|
||||
{
|
||||
this.MapperAction=UtilMethods.IsNullReturnNew(this.MapperAction);
|
||||
|
||||
@@ -273,6 +273,38 @@ namespace SqlSugar
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal string GetFilters(Type type)
|
||||
{
|
||||
var result = "";
|
||||
if (this.Context != null)
|
||||
{
|
||||
var db = Context;
|
||||
BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;
|
||||
var index = 0;
|
||||
if (db.QueryFilter.GeFilterList != null)
|
||||
{
|
||||
foreach (var item in db.QueryFilter.GeFilterList)
|
||||
{
|
||||
PropertyInfo field = item.GetType().GetProperty("exp", flag);
|
||||
if (field != null)
|
||||
{
|
||||
Type ChildType = item.GetType().GetProperty("type", flag).GetValue(item, null) as Type;
|
||||
if (ChildType == type)
|
||||
{
|
||||
var entityInfo = db.EntityMaintenance.GetEntityInfo(ChildType);
|
||||
var exp = field.GetValue(item, null) as Expression;
|
||||
var whereStr = index==0 ? " " : " AND ";
|
||||
index++;
|
||||
result += (whereStr + GetExpressionValue(exp, ResolveExpressType.WhereSingle).GetString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public virtual string ToSqlString()
|
||||
{
|
||||
string oldOrderBy = this.OrderByValue;
|
||||
|
||||
@@ -91,6 +91,19 @@ namespace SqlSugar
|
||||
else
|
||||
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)
|
||||
{
|
||||
switch (member.MemberType)
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace SqlSugar
|
||||
ISugarQueryable<T, T2> InnerJoin<T2>(Expression<Func<T, T2, bool>> joinExpression);
|
||||
ISugarQueryable<T, T2> RightJoin<T2>(Expression<Func<T, T2, bool>> joinExpression);
|
||||
ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false);
|
||||
ISugarQueryable<T> Filter(Type type);
|
||||
ISugarQueryable<T> Mapper(Action<T> mapperAction);
|
||||
ISugarQueryable<T> Mapper<AType, BType, MappingType>(Expression<Func<MappingType, ManyToMany>> expression);
|
||||
ISugarQueryable<T> Mapper(Action<T, MapperCache<T>> mapperAction);
|
||||
|
||||
Reference in New Issue
Block a user