private static IQueryable <T> OrderBy <T>(IQueryable <T> source, ResourceEntityOrders order) where T : BaseResourceEntity { return(order switch { ResourceEntityOrders.Latest => source.OrderByDescending(ele => ele.LastModificationTime), ResourceEntityOrders.Time => source.OrderBy(ele => ele.LastModificationTime), ResourceEntityOrders.Name => source.OrderBy(ele => ele.Name), ResourceEntityOrders.Z2A => source.OrderByDescending(ele => ele.Name), _ => source });
/// <summary> /// Filters the entity collection. /// </summary> /// <typeparam name="T">The type of entity.</typeparam> /// <param name="col">The entity collection.</param> /// <param name="q">The query arguments.</param> /// <param name="predicate">A function to test each element for a condition.</param> /// <param name="defaultOrder">The default order.</param> /// <param name="cancellationToken">The optional token to monitor for cancellation requests.</param> /// <returns>A list of entity.</returns> public static Task <List <T> > ToListAsync <T>(this IQueryable <T> col, QueryArgs q, Expression <Func <T, bool> > predicate, ResourceEntityOrders defaultOrder, CancellationToken cancellationToken = default) where T : BaseResourceEntity { if (col == null) { return(null); } if (q != null) { if (!string.IsNullOrWhiteSpace(q.NameQuery)) { col = q.NameExactly ? col.Where(ele => ele.Name == q.NameQuery) : col.Where(ele => ele.Name != null && ele.Name.Contains(q.NameQuery)); } if (predicate != null) { col = col.Where(predicate); } col = OrderBy(col.Where(ele => ele.StateCode == (int)q.State), q.Order == ResourceEntityOrders.Default ? defaultOrder : q.Order); if (q.Offset > 0) { col = col.Skip(q.Offset); } col = col.Take(q.Count > 0 ? q.Count : ResourceEntityExtensions.PageSize); } else { if (predicate != null) { col = col.Where(predicate); } col = col.Take(ResourceEntityExtensions.PageSize); } return(col.ToListAsync(cancellationToken)); }