/// <summary> /// 判断实体是否具有孩子。 /// </summary> /// <param name="entity">当前实体。</param> /// <param name="predicate">用于测试每个元素是否满足条件的函数。</param> /// <returns></returns> public virtual bool HasChildren(TEntity entity, Expression <Func <TEntity, bool> > predicate = null) { var query = (IQueryable)QueryHelper.CreateQuery <TEntity>(repository.Provider, predicate); var mthCount = typeof(Enumerable).GetMethods().FirstOrDefault(s => s.Name == "Count" && s.GetParameters().Length == 2); mthCount = mthCount.MakeGenericMethod(typeof(TEntity)); var expression = TreeExpressionBuilder.BuildHasChildrenExpression(metaTree, entity, predicate); expression = Expression.Call(null, mthCount, query.Expression, expression); return((int)repository.Provider.Execute(expression) > 0); }
/// <summary> /// 异步的,判断实体是否具有孩子。 /// </summary> /// <param name="entity">当前实体。</param> /// <param name="predicate">用于测试每个元素是否满足条件的函数。</param> /// <param name="cancellationToken">取消操作的通知。</param> /// <returns></returns> public virtual async Task <bool> HasChildrenAsync(TEntity entity, Expression <Func <TEntity, bool> > predicate = null, CancellationToken cancellationToken = default) { var query = (IQueryable)QueryHelper.CreateQuery <TEntity>(repository.Provider, predicate); var mthCount = typeof(Enumerable).GetMethods().FirstOrDefault(s => s.Name == "Count" && s.GetParameters().Length == 2); mthCount = mthCount.MakeGenericMethod(typeof(TEntity)); var expression = TreeExpressionBuilder.BuildHasChildrenExpression(metaTree, entity, predicate); expression = Expression.Call(null, mthCount, query.Expression, expression); return(await((IAsyncQueryProvider)repository.Provider).ExecuteAsync <int>(expression, cancellationToken) > 0); }