Я искал async .Where()
, но не смог найти его, после некоторых исследований, которые я создал.Asynchronous LINQ
public static class LinqExtension
{
public static async Task<IEnumerable<T>> WhereAsync<T>(this IEnumerable<T> source, Func<T, Task<bool>> @delegate)
{
var tasks = source.Select(async t => new
{
Predicate = await @delegate(t).ConfigureAwait(false),
Value = t
}).ToList();
var results = await Task.WhenAll(tasks).ConfigureAwait(false);
IEnumerable<T> typeList = results.Where(pred => pred.Predicate).Select(val => val.Value);
return typeList;
}
}
Когда я пытаюсь использовать его я получаю сообщение об ошибке выполнения
Не удается преобразовать неявным типа BOOL к задаче и да, это правильно
Это, как я пытался
var q = await context.StockHistories.WhereAsync(x => x.ProductId == productId);
Я пробовал
context.StockHistories.WhereAsync(Task.Run(() => { x => x.ProductId == productId; }));
но получить
Только назначение, вызов, увеличение, уменьшение, и новые выражения объекта могут быть использованы в качестве заявления
Может угодить кто-то обеспечить решение и объяснить, что я делать не так?
Создание асинхронного выражения лямбда не будет делать метод async, потому что он просто переводит это в SQL. Асинхронные методы - это только те, которые будут запускать запрос типа «ToListAsync» или «FirstOrDefaultAsync». – juharr
Это похоже на что-то из Reactive Extensions, а не LINQ. – Euphoric
@Euphoric Как бы вы использовали Reactive Extensions с EF? – juharr