Можно ли написать запрос Async IQueryable <TEntity>? - PullRequest
0 голосов
/ 03 июля 2019

Я бы хотел запросить таблицу базы данных. Интересно, смогу ли я преобразовать свой запрос в асинхронный IQueryable.

Вот что у меня есть,

var gameBankResult = await (context.GameBanks.Where(g => g.productCode == initiate.productCode)
                .Where(l => l.referenceId == null)
                ).ToListAsync();

Как я могу превратить это в это?

public virtual IQueryable<TEntity> GetManyQueryable(Func<TEntity, bool> where)
        {
            return dbSet.Where(where).AsQueryable();
        }

Ответы [ 2 ]

3 голосов
/ 03 июля 2019

Во-первых, при использовании IQueryable<T> предпочитайте выражения делегатам, т.е.

public virtual IQueryable<TEntity> GetManyQueryable(
    Expression<Func<TEntity, bool>> where)
{
    return dbSet.Where(where);
}

Тогда вы сможете использовать:

var query = whatever.Where(
    g => g.productCode == initiate.productCode && g.referenceId == null).ToListAsync();

но, честно говоря ... это не сильно отличается от того, что у вас уже есть

2 голосов
/ 03 июля 2019

Вы должны передавать Expression, а не Func, в противном случае Entity Framework выполнит запрос немедленно, перенеся всю таблицу в память и осуществив локальную фильтрацию. Например:

public virtual IQueryable<TEntity> GetManyQueryable(Expression<Func<TEntity, bool>> where)
{
    return dbSet.Where(where);
}

См. здесь для хорошего описания разницы.

...