public async Task <TEntity> GetByIdAsync(int id, IBaseSpecifications <TEntity> baseSpecifications = null)
        {
            try
            {
                var item = await _blogContext.Set <TEntity>()
                           .Where(x => x.Id == id)
                           .AsNoTracking()
                           .FirstOrDefaultAsync();

                //var item = await SpecificationEvaluator<TEntity>.GetQuery(_blogContext.Set<TEntity>()
                //                    .Where(x => x.Id == id)
                //                    .AsQueryable(), baseSpecifications)
                //                    .AsNoTracking()
                //                    .FirstOrDefaultAsync();

                // var item = await _blogContext.Set<TEntity>().Where(x => x.Id == id).AsNoTracking().FirstOrDefaultAsync();
                if (item == null)
                {
                    throw new Exception($"Couldn't find entity with id={id}");
                }

                return(item);
            }
            catch (Exception ex)
            {
                throw new Exception($"Couldn't retrieve entity with id={id}: {ex.Message}");
            }
        }
Esempio n. 2
0
        public static IQueryable <TEntity> GetQuery(IQueryable <TEntity> query, IBaseSpecifications <TEntity> specifications)
        {
            // Do not apply anything if specifications is null
            if (specifications == null)
            {
                return(query);
            }

            // Modify the IQueryable
            // Apply filter conditions
            if (specifications.FilterCondition != null)
            {
                query = query.Where(specifications.FilterCondition);
            }

            // Includes
            query = specifications.Includes
                    .Aggregate(query, (current, include) => current.Include(include));

            // Apply ordering
            if (specifications.OrderBy != null)
            {
                query = query.OrderBy(specifications.OrderBy);
            }
            else if (specifications.OrderByDescending != null)
            {
                query = query.OrderByDescending(specifications.OrderByDescending);
            }

            // Apply GroupBy
            if (specifications.GroupBy != null)
            {
                query = query.GroupBy(specifications.GroupBy).SelectMany(x => x);
            }

            return(query);
        }