public void HybridMergeTimeTest(int length, int maxElement, int k)
        {
            var sw   = new Stopwatch();
            var rand = new Random();

            int[] actual1  = new int[length];
            int[] actual2  = new int[length];
            int[] expected = new int[length];
            for (var i = 0; i < length; i++)
            {
                actual1[i] = rand.Next(maxElement);
            }
            Array.Copy(actual1, expected, actual1.Length);
            Array.Copy(actual1, actual2, actual1.Length);

            sw.Start();
            SortExtension.HybridMergeSort(actual1, 0, actual1.Length - 1, k);
            sw.Stop();
            System.Console.WriteLine($"HybridSort time is {sw.ElapsedMilliseconds}ms");

            sw.Restart();
            SortExtension.MergeSort(actual2, 0, actual2.Length - 1);
            sw.Stop();
            System.Console.WriteLine($"MergeSort time is {sw.ElapsedMilliseconds}ms");

            sw.Restart();
            Array.Sort(expected);
            sw.Stop();
            System.Console.WriteLine($"Library sort time is {sw.ElapsedMilliseconds}ms");

            Assert.AreEqual(expected, actual1);
            Assert.AreEqual(expected, actual2);
        }
示例#2
0
        public async Task <Tuple <List <T>, int> > Pager <Key>(Expression <Func <T, bool> > where, string order, bool descSort, int offset, int limit, params string[] properties)
        {
            var query = where is null?DbSet.AsQueryable() : DbSet.Where(where).AsQueryable();

            int count = await query.CountAsync();

            query = string.IsNullOrEmpty(order) ?
                    query.OrderBy(x => Guid.NewGuid().ToString()).Skip(offset) :
                    SortExtension.OrderByDynamic(query, order, descSort).Skip(offset);

            //if(order is null) {
            //    query = query.Skip(offset ?? 0);
            //} else {
            //    query = descSort ? query.OrderByDescending(order).Skip(offset ?? 0) : query.OrderBy(order).Skip(offset ?? 0);
            //}

            foreach (var prop in properties)
            {
                query = query.Include(prop);
            }

            query = query.Take(limit);
            var result = await query.ToListAsync();

            return(new Tuple <List <T>, int>(result, count));
        }
 /// <summary>
 /// 通过查询条件获取全部数据
 /// </summary>
 /// <param name="pg">查询条件,需要自己在Service层构造</param>
 /// <param name="orderList">排序方式,默认id倒序</param>
 /// <returns>查询结果数组</returns>
 public virtual List <T> Find(PredicateGroup pg, List <OrderItem> orderList = null)
 {
     using (var conn = ConnectionFactory.CreateConnection())
     {
         return(conn.GetList <T>(pg, SortExtension.ToSortList <T>(orderList)).ToList());
     }
 }
        public PageResult <T> GetPager(PredicateGroup pg, PageQuery pageQuery)
        {
            var result = new PageResult <T>();

            ////PageIndex等于0时返回全部
            if (pageQuery.PageIndex == 0)
            {
                using (var conn = ConnectionFactory.CreateConnection())
                {
                    result.Row   = conn.GetList <T>(pg, SortExtension.ToSortList <T>(pageQuery.OrderList)).ToList();
                    result.Total = result.Row.Count;
                    return(result);
                }
            }

            if (pageQuery.PageIndex < 0)
            {
                throw new ArgumentException(nameof(pageQuery.PageIndex));
            }

            if (pageQuery.PageSize <= 0)
            {
                throw new ArgumentException(nameof(pageQuery.PageSize));
            }

            using (var conn = ConnectionFactory.CreateConnection())
            {
                var total = conn.Count <T>(pg);
                result.Total = total;

                //判断请求有数据时再查询
                if (total > (pageQuery.PageIndex - 1) * pageQuery.PageSize)
                {
                    result.Row = conn.GetPage <T>(pg, SortExtension.ToSortList <T>(pageQuery.OrderList), pageQuery.PageIndex - 1, pageQuery.PageSize)
                                 .ToList();
                }

                return(result);
            }
        }