예제 #1
0
 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
     });
예제 #2
0
        /// <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));
        }