public async Task <int> Count(AccountFoodFavoriteFilter filter)
        {
            IQueryable <AccountFoodFavoriteDAO> AccountFoodFavorites = DataContext.AccountFoodFavorite;

            AccountFoodFavorites = DynamicFilter(AccountFoodFavorites, filter);
            return(await AccountFoodFavorites.CountAsync());
        }
        public async Task <List <AccountFoodFavorite> > List(AccountFoodFavoriteFilter filter)
        {
            if (filter == null)
            {
                return(new List <AccountFoodFavorite>());
            }
            IQueryable <AccountFoodFavoriteDAO> AccountFoodFavoriteDAOs = DataContext.AccountFoodFavorite;

            AccountFoodFavoriteDAOs = DynamicFilter(AccountFoodFavoriteDAOs, filter);
            AccountFoodFavoriteDAOs = DynamicOrder(AccountFoodFavoriteDAOs, filter);
            List <AccountFoodFavorite> AccountFoodFavorites = await DynamicSelect(AccountFoodFavoriteDAOs, filter);

            return(AccountFoodFavorites);
        }
        private async Task <List <AccountFoodFavorite> > DynamicSelect(IQueryable <AccountFoodFavoriteDAO> query, AccountFoodFavoriteFilter filter)
        {
            List <AccountFoodFavorite> AccountFoodFavorites = await query.Select(q => new AccountFoodFavorite()
            {
                AccountId = filter.Selects.Contains(AccountFoodFavoriteSelect.Account) ? q.AccountId : default(long),
                FoodId    = filter.Selects.Contains(AccountFoodFavoriteSelect.Food) ? q.FoodId : default(long),
                Account   = filter.Selects.Contains(AccountFoodFavoriteSelect.Account) && q.Account != null ? new Account
                {
                    Id                   = q.Account.Id,
                    DisplayName          = q.Account.DisplayName,
                    Email                = q.Account.Email,
                    Phone                = q.Account.Phone,
                    Password             = q.Account.Password,
                    Salt                 = q.Account.Salt,
                    PasswordRecoveryCode = q.Account.PasswordRecoveryCode,
                    ExpiredTimeCode      = q.Account.ExpiredTimeCode,
                    Address              = q.Account.Address,
                    Dob                  = q.Account.Dob,
                    Avatar               = q.Account.Avatar,
                    RoleId               = q.Account.RoleId,
                } : null,
                Food = filter.Selects.Contains(AccountFoodFavoriteSelect.Food) && q.Food != null ? new Food
                {
                    Id           = q.Food.Id,
                    Name         = q.Food.Name,
                    PriceEach    = q.Food.PriceEach,
                    DiscountRate = q.Food.DiscountRate,
                    Image        = q.Food.Image,
                    StatusId     = q.Food.StatusId,
                    Descreption  = q.Food.Descreption,
                } : null,
            }).AsNoTracking().ToListAsync();

            return(AccountFoodFavorites);
        }
        private IQueryable <AccountFoodFavoriteDAO> DynamicOrder(IQueryable <AccountFoodFavoriteDAO> query, AccountFoodFavoriteFilter filter)
        {
            switch (filter.OrderType)
            {
            case OrderType.ASC:
                switch (filter.OrderBy)
                {
                case AccountFoodFavoriteOrder.Account:
                    query = query.OrderBy(q => q.AccountId);
                    break;

                case AccountFoodFavoriteOrder.Food:
                    query = query.OrderBy(q => q.FoodId);
                    break;
                }
                break;

            case OrderType.DESC:
                switch (filter.OrderBy)
                {
                case AccountFoodFavoriteOrder.Account:
                    query = query.OrderByDescending(q => q.AccountId);
                    break;

                case AccountFoodFavoriteOrder.Food:
                    query = query.OrderByDescending(q => q.FoodId);
                    break;
                }
                break;
            }
            query = query.Skip(filter.Skip).Take(filter.Take);
            return(query);
        }
 private IQueryable <AccountFoodFavoriteDAO> DynamicFilter(IQueryable <AccountFoodFavoriteDAO> query, AccountFoodFavoriteFilter filter)
 {
     if (filter == null)
     {
         return(query.Where(q => false));
     }
     if (filter.AccountId != null)
     {
         query = query.Where(q => q.AccountId, filter.AccountId);
     }
     if (filter.FoodId != null)
     {
         query = query.Where(q => q.FoodId, filter.FoodId);
     }
     return(query);
 }