Можно ли вернуть IQueryable из репозитория? [закрыто]C#

Место общения программистов C#
Anonymous
Можно ли вернуть IQueryable из репозитория? [закрыто]

Сообщение Anonymous »

У меня есть веб-API ASP.NET Core. Я использую шаблон репозитория, в котором метод GetAll возвращает коллекцию IQueryable для фильтрации данных на стороне базы данных. Это правильно?
Вот интерфейс:

Код: Выделить всё

public interface IBaseRepository
{
IQueryable GetAll();

Task CreateAsync(TEntity entity);
Task UpdateAsync(TEntity entity);
Task DeleteAsync(TEntity entity);
}
Вот реализация:

Код: Выделить всё

public class BaseRepository : IBaseRepository where TEntity : class
{
private readonly ApplicationDbContext _dbContext;

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

public async Task CreateAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");

await _dbContext.AddAsync(entity);
await _dbContext.SaveChangesAsync();

return entity;
}

public async Task DeleteAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");

_dbContext.Remove(entity);
await _dbContext.SaveChangesAsync();

return entity;
}

public IQueryable GetAll()
{
return _dbContext.Set();
}

public async Task UpdateAsync(TEntity entity)
{
if (entity == null)
throw new ArgumentException("Entity is null");

_dbContext.Update(entity);
await _dbContext.SaveChangesAsync();

return entity;
}
}
Это позволяет мне выполнять фильтрацию на стороне базы данных:

Код: Выделить всё

reports = await _reportRepository.GetAll()
.Where(x => x.UserId == userId)
.ToArrayAsync();
Насколько корректен такой подход? Недавно я услышал, что нужно вернуть IEnumerable из репозитория.

Подробнее здесь: https://stackoverflow.com/questions/787 ... repository

Вернуться в «C#»