как реализовать ГДЕ в асинхронном методе - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь реализовать асинхронный метод, используя Where (). Я не могу найти ни одной асинхронной версии метода Where. и ToListAsync недоступен для IEnumerable. Должен ли я использовать другой метод?

public async Task<IEnumerable<TEntity>> Where(Func<TEntity, bool> predicate)
{
    var tmp = await this.DbSet.Where(predicate).ToListAsync(); //error: ToListAsync not available

    return tmp;
}

DbSet имеет тип DbSet<TEntity>

Проект нацелен на .NET Standard 2.0 и ссылается на Microsoft.EntityFrameworkCore 2.2.1, и я определил «использование Microsoft.EntityFrameworkCore».

В Документе я вижу, что большинство расширений нацелены на IQueryable <>, но я работаю с IEnumerable <>. Может ли это быть проблема? Но Where () возвращает IEnumerable.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вам нужно использовать выражение, а не функцию.

Итак:

public async Task<IEnumerable<TEntity>> Where(Expression<Func<TEntity, bool>> predicate)
{
    var tmp = await this.DbSet.Where(predicate).ToListAsync();
    return tmp;
}

Func<TEntity, bool> ожидает фактическую функцию, тогда как Expression<Func<TEntity, bool>> ожидает дерево выражений.IQueryable создает ваш SQL-запрос на основе этого дерева выражений.Используя Func, вы вызываете перегрузку Where из обычного LINQ, которая возвращает IEnumerable.Который не имеет ToListAsync.

0 голосов
/ 16 января 2019

Вы должны добавить его пространство имен, которое включено в EntityFramework.dll.

Пожалуйста, найдите его здесь .

0 голосов
/ 16 января 2019

Вам необходимо импортировать пространство имен Microsoft.EntityFrameworkCore. См. Официальную документацию для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...