BaseRepository for EF6 Is this okay?

public class BaseRepository&lt;T&gt; where T : class
{
    private readonly DbContext _dbContext;

    public BaseRepository(DbContext dbContext)
    {
        _dbContext = dbContext;
    }

    public T Get(Func&lt;T, bool&gt; predicate)
    {
        return GetAll(predicate).FirstOrDefault();
    }

    public IEnumerable&lt;T&gt; GetAll(Func&lt;T, bool&gt; predicate = null)
    {
        IEnumerable&lt;T&gt; result = _dbContext.Set&lt;T&gt;().AsEnumerable();
        return (predicate == null) ? result : result.Where&lt;T&gt;(predicate);
    }

    public void Add(T entity)
    {
        _dbContext.Entry(entity).State = EntityState.Added;
    }

    public void Delete(Func&lt;T, bool&gt; predicate)
    {
        IEnumerable&lt;T&gt; entities = GetAll(predicate);
        foreach (T entity in entities)
            _dbContext.Entry(entity).State = EntityState.Deleted;
    }

    public void Delete(T entity)
    {
        _dbContext.Entry(entity).State = EntityState.Deleted;
    }

    public void Update(T entity)
    {
        _dbContext.Entry(entity).State = EntityState.Modified;
    }

    public async void Save()
    {
        await _dbContext.SaveChangesAsync();
    }

    public void Dispose()
    {
        if (_dbContext != null)
            _dbContext.Dispose();
    }
}
It seems strange to me for Get to be a specific way of getting all items, and GetAll should always return all items. Introduce a GetSome helper for clarity.

public T Get(Func&lt;T, bool&gt; predicate) {
    return GetWhere(predicate).FirstOrDefault();
}

public IEnumerable&lt;T&gt; GetAll() {
    return GetWhere(null);
}

public IEnumerable&lt;T&gt; GetWhere(Func&lt;T, bool&gt; predicate) {
    IEnumerable&lt;T&gt; result = _dbContext.Set&lt;T&gt;().AsEnumerable();
    return (predicate == null) ? result : result.Where&lt;T&gt;(predicate);
}



  Caveat: I don't write C# so perhaps this doesn't match the standard pattern there.