public static IQueryable <Course> SmartWhere(this IQueryable <Course> queryable, string Title, bool IsDeleted, IEnumerable <int> SelectedGroup, int MinPrice, int MaxPrice, PriceStatusType statusType, string KeyWordTitle = "") { Expression <Func <Course, bool> > expression = c => (string.IsNullOrEmpty(Title) || EF.Functions.Like(c.CourseTitle, $"%{Title}%") && c.IsDeleted == IsDeleted); switch (statusType) { case PriceStatusType.All: queryable = queryable.Where(expression).Where(c => c.CoursePrice <= MaxPrice && c.CoursePrice >= MinPrice); break; case PriceStatusType.Free: queryable = queryable.Where(expression).Where(c => c.CoursePrice < 1000); break; case PriceStatusType.Cash: queryable = queryable.Where(expression).Where(c => c.CoursePrice <= MaxPrice && c.CoursePrice >= MinPrice); break; } if (SelectedGroup != null && SelectedGroup.Any()) { queryable = queryable.Where(c => SelectedGroup.Contains(c.CourseGroup.Id)); } if (!string.IsNullOrEmpty(KeyWordTitle)) { queryable = queryable.Where(c => c.Keywordkeys.Any(k => k.Title == KeyWordTitle)); } return(queryable); }
public async Task <PagedResult <Course> > GetPagedCourseAsync(string Title, bool IsDeleted, int Count, int CurrentNumber, CancellationToken cancellationToken, PriceStatusType PrisceStatusType = PriceStatusType.All, OrderStatusType orderStatusType = OrderStatusType.Default, int StartingPrice = 0, int EndOfPrice = 0, IEnumerable <int> SelectedGroup = null, string KeyWordTitle = "") { PagedResult <Course> paged = new PagedResult <Course>(); int ListCount = await NoTrackEntities.SmartWhere(Title, IsDeleted, SelectedGroup, StartingPrice, EndOfPrice, PrisceStatusType, KeyWordTitle).CountAsync(cancellationToken); IQueryable <Course> query = NoTrackEntities.SmartWhere(Title, IsDeleted, SelectedGroup, StartingPrice, EndOfPrice, PrisceStatusType, KeyWordTitle).SmartOrderByStatus(orderStatusType); paged.ListItem = await query.Skip((CurrentNumber - 1) *Count).Take(Count) .AsNoTracking() .ToListAsync(cancellationToken); paged.PageData.CurentItem = CurrentNumber; paged.PageData.TotalItem = ListCount; paged.PageData.ItemPerPage = Count; return(paged); }