.ToListAsync () не найден при использовании WhereIf - PullRequest
0 голосов
/ 05 мая 2018

Я читаю этот урок . Я хочу использовать async запрос с EF Core.

Хорошо работает, когда я использую вот так:

var tasks = await _taskRepository
    .GetAll()
    //.WhereIf(!string.IsNullOrEmpty(input?.Title), x => x.Title.Contains(input.Title))
    //.WhereIf(input?.State != null, x => x.State == input.State.Value)
    //.OrderByDescending(x => x.CreationTime)
    .ToListAsync();

но я хочу использовать whereif и orderby как

var tasks = await _taskRepository
    .GetAll()
    .WhereIf(!string.IsNullOrEmpty(input?.Title), x => x.Title.Contains(input.Title))
    .WhereIf(input?.State != null, x => x.State == input.State.Value)
    .OrderByDescending(x => x.CreationTime)
    .ToListAsync();

Ошибка:

«IOrderedEnumerable» не содержит определения для «ToListAsync», и метод расширения «ToListAsync», принимающий первый аргумент типа «IOrderedEnumerable», не найден (отсутствует директива using или ссылка на сборку?)

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы используете неправильное расширение WhereIf, его легко пропустить, потому что вам нужно добавить дополнительные с помощью Visual Studio не будет предлагать.

Вы используете расширение, которое возвращает IEnumerable

Abp.Collections.Extensions.EnumerableExtensions.WhereIf<T>()

Вам нужно использовать расширение, которое возвращает IQueryable

Abp.Linq.Extensions.QueryableExtensions.WhereIf<T>()

Это легко исправить, просто добавьте вверху файла , используя Abp.Linq.Extensions;

0 голосов
/ 05 мая 2018

IOrderedEnumerable<Task> означает, что вы работаете с IEnumerable<Task>.

Entity Framework Core работает с IQueryable<T> (который представляет запрос к базе данных), а не с IEnumerable<T> (который представляет коллекцию в памяти). Как только IQueryable<T> преобразуется в IEnumerable<T>, запрос выполняется на сервере базы данных и извлекается результат.

Итак: если вы вызываете метод, который возвращает IEnumerable<T>, этот метод не был создан для использования в LINQ to Entities.

...