Я реализовал в своем проекте шаблон репозитория и имею CoinRepository
, и я хочу добавить новый метод (GetValues
), который извлекает только один столбец (значения) на основе условия из таблицы Coin, которая имеет несколько столбцы.
Вот класс CoinRepositopry
и метод.
public class CoinRepository : Repository<Coin>, ICoinRepository
{
public CoinRepository(MyContext context) : base(context) { }
public IEnumerable<decimal> GetValuesAsync(int gameId, int gameTableId, string partnerCurrencyId)
{
return GetAllAsync().Result
.Where(c => c.GameId == gameId && c.CurrencyId == partnerCurrencyId)
.Select(c => c.Value);
}
}
Метод GetAllAsync
- это метод в интерфейсе IRepository
, который возвращает Task <IEnumerable<Entity>>
.
public async Task<IEnumerable<T>> GetAllAsync(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = null)
{
IQueryable<T> query = dbSet;
if (filter != null)
query = query.Where(filter);
if (includeProperties != null)
foreach (var includeProperty in includeProperties.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
query = query.Include(includeProperty);
if (orderBy != null)
return await orderBy(query).ToListAsync();
return await query.ToListAsync();
}
Мои вопросы:
Следует ли использовать метод GetValuesAsync
и async
?
Есть ли метод GetAllAsync
выполняет запрос в базе данных и извлекает все записи, затем применяет условия в коде - или он выполняет запрос в базе данных следующим образом: SELECT c.value FROM COIN c WHERE <condition>
?
Если у моего кода есть проблемы и он недостаточно быстр, как я могу его изменить и рефакторинг наиболее оптимальным образом?
Спасибо