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); }
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); } }