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}"); } }
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); }