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);
        }
Пример #2
0
        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);
        }