Esempio n. 1
0
        private static string GetKey <TEntity, TResult>(IQueryable <TEntity> source,
                                                        Expression <Func <TEntity, bool> > predicate,
                                                        PageCondition pageCondition,
                                                        Expression <Func <TEntity, TResult> > selector, params object[] keyParams)
        {
            if (!typeof(TEntity).IsEntityType())
            {
                throw new InvalidOperationException(Resources.QueryCacheExtensions_TypeNotEntityType.FormatWith(typeof(TEntity).FullName));
            }

            source = source.Where(predicate);
            SortCondition[] sortConditions = pageCondition.SortConditions;
            if (sortConditions == null || sortConditions.Length == 0)
            {
                source = source.OrderBy("Id");
            }
            else
            {
                int count = 0;
                IOrderedQueryable <TEntity> orderSource = null;
                foreach (SortCondition sortCondition in sortConditions)
                {
                    orderSource = count == 0
                        ? CollectionPropertySorter <TEntity> .OrderBy(source, sortCondition.SortField, sortCondition.ListSortDirection)
                        : CollectionPropertySorter <TEntity> .ThenBy(orderSource, sortCondition.SortField, sortCondition.ListSortDirection);

                    count++;
                }
                source = orderSource;
            }
            int pageIndex = pageCondition.PageIndex, pageSize = pageCondition.PageSize;

            source = source != null
                ? source.Skip((pageIndex - 1) *pageSize).Take(pageSize)
                : Enumerable.Empty <TEntity>().AsQueryable();

            IQueryable <TResult> query = source.Select(selector);

            return(GetKey(query.Expression, keyParams));
        }
Esempio n. 2
0
        public override List <T> GetList <T>(Expression <Func <ImageInfo, bool> > predicate,
                                             int pageIndex,
                                             int pageSize,
                                             ref int total,
                                             List <SortCondition> sortConditions = null)
        {
            if (total <= 0)
            {
                total = Repository.Entities.Count(predicate);
            }
            var source = Repository.Entities.Where(predicate);

            if (sortConditions == null || sortConditions.Count == 0)
            {
                source = source.OrderByDescending(m => m.Id);
            }
            else
            {
                int count = 0;
                IOrderedQueryable <ImageInfo> orderSource = null;
                foreach (SortCondition sortCondition in sortConditions)
                {
                    orderSource = count == 0
                        ? CollectionPropertySorter <ImageInfo> .OrderBy(source, sortCondition.SortField, sortCondition.ListSortDirection)
                        : CollectionPropertySorter <ImageInfo> .ThenBy(orderSource, sortCondition.SortField, sortCondition.ListSortDirection);

                    count++;
                }
                source = orderSource;
            }
            var lst = source != null
                ? source.Skip((pageIndex - 1) *pageSize).Take(pageSize)
                : Enumerable.Empty <ImageInfo>();

            return(lst.ToList().Select(n => (T)(new T().ConvertAPIModel(n))).ToList());

            //  var lst = this.Entities.Where(predicate).Take(iTop).ToList().Select(n => (T)(new T().ConvertAPIModel(n))).ToList();

            // return lst;
        }
        /// <summary>
        /// 把排序条件集合转成排序查询
        /// </summary>
        /// <typeparam name="TEntity">要排序实体</typeparam>
        /// <param name="source">源</param>
        /// <param name="orderConditions">排序条件集合</param>
        /// <returns></returns>
        public static IOrderedQueryable <TEntity> OrderBy <TEntity>(this IQueryable <TEntity> source, OrderCondition[] orderConditions)
        {
            IOrderedQueryable <TEntity> orderSource = null;

            if (orderConditions == null || orderConditions.Length == 0)
            {
                orderSource = CollectionPropertySorter <TEntity> .OrderBy(source, "Id", SortDirection.Ascending);
            }

            int count = 0;

            foreach (OrderCondition orderCondition in orderConditions)
            {
                orderSource = count == 0
                    ? CollectionPropertySorter <TEntity> .OrderBy(source, orderCondition.SortField, orderCondition.SortDirection)
                    : CollectionPropertySorter <TEntity> .ThenBy(orderSource, orderCondition.SortField, orderCondition.SortDirection);

                count++;
            }

            return(orderSource);
        }
        public void OrderByTest()
        {
            IEnumerable <TestEntity> list1 = Entities.ToList();
            IEnumerable <TestEntity> list2 = CollectionPropertySorter <TestEntity> .OrderBy(list1, "AddDate", ListSortDirection.Ascending);

            Assert.False(list2.SequenceEqual(list1));
            IOrderedEnumerable <TestEntity> temp1 = CollectionPropertySorter <TestEntity> .OrderBy(list1, "AddDate", ListSortDirection.Ascending);

            IEnumerable <TestEntity> list3 = CollectionPropertySorter <TestEntity> .ThenBy(temp1, "IsDeleted", ListSortDirection.Descending);

            Assert.False(list1.SequenceEqual(list3));

            IQueryable <TestEntity> query1 = Entities.AsQueryable();
            IQueryable <TestEntity> query2 = CollectionPropertySorter <TestEntity> .OrderBy(query1, "AddDate", ListSortDirection.Ascending);

            Assert.False(query2.SequenceEqual(query1));
            IOrderedQueryable <TestEntity> temp2 = CollectionPropertySorter <TestEntity> .OrderBy(query1, "AddDate", ListSortDirection.Ascending);

            IEnumerable <TestEntity> query3 = CollectionPropertySorter <TestEntity> .ThenBy(temp2, "IsDeleted", ListSortDirection.Descending);

            Assert.False(query1.SequenceEqual(query3));
        }
        /// <summary>
        /// 从指定<see cref="IQueryable{T}"/>集合 中查询指定分页条件的子数据集
        /// </summary>
        /// <typeparam name="TEntity">动态实体类型</typeparam>
        /// <typeparam name="TKey">实体主键类型</typeparam>
        /// <param name="source">要查询的数据集</param>
        /// <param name="predicate">查询条件谓语表达式</param>
        /// <param name="pageIndex">分页索引</param>
        /// <param name="pageSize">分页大小</param>
        /// <param name="total">输出符合条件的总记录数</param>
        /// <param name="sortConditions">排序条件集合</param>
        /// <returns></returns>
        public static IQueryable <TEntity> Where <TEntity, TKey>(this IQueryable <TEntity> source,
                                                                 Expression <Func <TEntity, bool> > predicate,
                                                                 int pageIndex,
                                                                 int pageSize,
                                                                 out int total,
                                                                 List <SortCondition> sortConditions = null) where TEntity : EntityBase <TKey>
        {
            source.CheckNotNull("source");
            predicate.CheckNotNull("predicate");
            pageIndex.CheckGreaterThan("pageIndex", 0);
            pageSize.CheckGreaterThan("pageSize", 0);

            total  = source.Count(predicate);
            source = source.Where(predicate);
            if (sortConditions == null || sortConditions.Count == 0)
            {
                source = source.OrderBy(m => m.Id);
            }
            else
            {
                int count = 0;
                IOrderedQueryable <TEntity> orderSource = null;
                foreach (SortCondition sortCondition in sortConditions)
                {
                    orderSource = count == 0
                        ? CollectionPropertySorter <TEntity> .OrderBy(source, sortCondition.SortField, sortCondition.ListSortDirection)
                        : CollectionPropertySorter <TEntity> .ThenBy(orderSource, sortCondition.SortField, sortCondition.ListSortDirection);

                    count++;
                }
                source = orderSource;
            }
            return(source != null
                ? source.Skip((pageIndex - 1) *pageSize).Take(pageSize)
                : Enumerable.Empty <TEntity>().AsQueryable());
        }
 /// <summary>
 /// 把<see cref="IOrderedQueryable{T}"/>集合继续按指定字段排序方式进行排序
 /// </summary>
 /// <typeparam name="T">动态类型</typeparam>
 /// <param name="source">要排序的数据集</param>
 /// <param name="propertyName">排序属性名</param>
 /// <param name="sortDirection">排序方向</param>
 /// <returns></returns>
 public static IOrderedQueryable <T> ThenBy <T>(this IOrderedQueryable <T> source,
                                                string propertyName,
                                                ListSortDirection sortDirection = ListSortDirection.Ascending)
 {
     return(CollectionPropertySorter <T> .ThenBy(source, propertyName, sortDirection));
 }
Esempio n. 7
0
        public IList <HseMessageView> GetHseStatus(RequestMessage requestMessage, PageCondition pageCondition, bool dataExport = false)
        {
            var before30Days = DateTime.Now.AddDays(-MonthRange);
            var startDate    = new DateTime(before30Days.Year, before30Days.Month, before30Days.Day);

            var expression = GetExpression(requestMessage, startDate);

            //expression = expression.And(x => x.CreatedDate >= startDate);

            var allQuery = GetDistinctQueryable(expression);

            var totalFutureQuery = allQuery.FutureCount();
            var query            = allQuery;

            if (pageCondition.SortConditions == null || !pageCondition.SortConditions.Any())
            {
                query = query.OrderByDescending(x => x.Id);
            }
            else
            {
                var count = 0;
                IOrderedQueryable <HseReceiverUserEntity> orderSource = null;
                foreach (var sortCondition in pageCondition.SortConditions)
                {
                    orderSource = count == 0
                        ? CollectionPropertySorter <HseReceiverUserEntity> .OrderBy(query, sortCondition.SortField, sortCondition.ListSortDirection)
                        : CollectionPropertySorter <HseReceiverUserEntity> .ThenBy(orderSource, sortCondition.SortField, sortCondition.ListSortDirection);

                    count++;
                }
                query = orderSource;
            }

            FutureQuery <HseReceiverUserEntity> listFutureQuery;

            if (pageCondition.PageSize <= 0)
            {
                listFutureQuery = query.Future();
            }
            else
            {
                listFutureQuery = (query != null ? query.Skip((pageCondition.PageIndex - 1) * pageCondition.PageSize).Take(pageCondition.PageSize) : Enumerable.Empty <HseReceiverUserEntity>()).AsQueryable().Future();
            }

            List <HseReceiverUserEntity> list;

            using (var trans = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions {
                IsolationLevel = IsolationLevel.ReadUncommitted
            }))
            {
                list = listFutureQuery.ToList();

                pageCondition.RowCount = totalFutureQuery.Value;
                trans.Complete();
            }

            if (!list.Any())
            {
                return(new List <HseMessageView>());
            }


            var repliedMessages = Repository.Entities.Where(
                x => x.RepliedDate >= startDate).Select(x => new { x.LillyId, x.Tel, x.Content, x.RepliedDate, x.Id, x.Origin, x.Status }).OrderByDescending(x => x.Id).ToList().Select(x => new HseReplyMessage {
                LillyId = x.LillyId, Tel = x.Tel, Content = x.Content, RepliedDate = x.RepliedDate, Status = x.Status, Origin = (Origin)Enum.Parse(typeof(Origin), x.Origin, true)
            }).ToList();

            var repliedGroup = repliedMessages.GroupBy(x => x.LillyId);

            return(list.AsParallel().Select(x =>
            {
                var items = repliedGroup.Where(y => y.Key.Equals(x.LillyId, StringComparison.OrdinalIgnoreCase)).SelectMany(y => y).ToList();

                if (dataExport == false)
                {
                    items.ForEach(t =>
                                  { t.Content = ConvertEmotion(t.Content); }
                                  );
                }

                HseReplyMessage latestItem = null;
                if (items.Any())
                {
                    latestItem = items[0];
                }

                return new HseMessageView
                {
                    LillyId = x.LillyId,
                    Name = x.Name,
                    Tel = x.Tel,
                    OneDepartment = x.FristLevelDepartmentName,
                    TwoDepartment = x.SecondLevelDepartmentName,
                    ThreeDepartment = x.ThirdLevelDepartmentName,
                    Location = x.Location,
                    EmergencyContact = x.EmergencyContact,
                    EmergencyName = x.EmergencyName,
                    ReplyMessages = items,
                    LatestRepliedDate = latestItem != null ? (DateTime?)latestItem.RepliedDate : null,
                    Status = x.Status,
                    LatestRepliedContent = latestItem != null ? latestItem.Content : null,
                };
            }).ToList());
        }
Esempio n. 8
0
 /// <summary>
 /// 把<see cref="IEnumerable{T}"/>集合按指定字段与排序方式进行排序
 /// </summary>
 /// <typeparam name="T">集合项类型</typeparam>
 /// <param name="source">要排序的数据集</param>
 /// <param name="propertyName">排序属性名</param>
 /// <param name="sortDirection">排序方向</param>
 /// <returns>排序后的数据集</returns>
 public static IOrderedEnumerable <T> OrderBy <T>(this IEnumerable <T> source,
                                                  string propertyName,
                                                  ListSortDirection sortDirection = ListSortDirection.Ascending)
 {
     return(CollectionPropertySorter <T> .OrderBy(source, propertyName, sortDirection));
 }