Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
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);
        }