Example #1
0
        /// <summary>
        /// 通过查询表达式来查询实体。
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="counting">if set to <c>true</c> [counting].</param>
        /// <returns></returns>
        private object QueryEntityList(Expression expression, bool counting)
        {
            //一般来说,直接使用 Linq 查询,都是在数据层,这时 FinalDataPortal.CurrentCriteria 已经被设置为当前的查询的条件了;
            //这时,如果接下来调用 _repository.QueryDbByLinq 方法,会导致这个查询使用外部的条件来检测是否需要分页、统计等。
            //所以,这里需要把这个条件先暂时清空。
            var iqec = new IEQC
            {
                QueryType  = counting ? RepositoryQueryType.Count : RepositoryQueryType.List,
                Parameters = new object[0]
            };

            using (FinalDataPortal.CurrentQueryCriteriaItem.UseScopeValue(iqec))
            {
                var queryable = this.CreateQuery(expression);

                return(_queryBase.QueryListByLinq(queryable));
            }
        }
Example #2
0
        /// <summary>
        /// 通过查询表达式来查询实体。
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <param name="counting">if set to <c>true</c> [counting].</param>
        /// <returns></returns>
        private EntityList QueryEntityList(Expression expression, bool counting)
        {
            //一般来说,直接使用 Linq 查询,都是在数据层,这时 FinalDataPortal.CurrentCriteria 已经被设置为当前的查询的条件了;
            //这时,如果接下来调用 _repository.QueryDbByLinq 方法,会导致这个查询使用外部的条件来检测是否需要分页、统计等。
            //所以,这里需要把这个条件先暂时清空。
            var oldValue = FinalDataPortal.CurrentCriteria;

            try
            {
                FinalDataPortal.CurrentCriteria = new IEQC
                {
                    FetchType  = counting ? FetchType.Count : FetchType.List,
                    Parameters = new object[0]
                };

                var queryable = this.CreateQuery(expression);

                return(_queryBase.QueryListByLinq(queryable));
            }
            finally
            {
                FinalDataPortal.CurrentCriteria = oldValue;
            }
        }