Как использовать методы расширения EF Core асинхронно - PullRequest
2 голосов
/ 29 марта 2020

У меня есть метод фильтра с выражением, например:

public IQueryable<Alert> GetAlerts(Expression<Func<Alert, bool>> filter, bool includeDone = false)
{
    var query = _patientDbContext.Alerts
                .Where(filter);

    if (!includeDone)
    {
        query = query.Where(i => !i.IsDone);
    }

    query = query.OrderBy(i => i.Deadline);

    return query;
}

Но теперь я хочу вызвать этот метод фильтра в реальной функции

public async Task<List<Alert>> GetAllAlertsForOrganisation(int organisationId, DateTime? beginDate, DateTime? endDate)
{
    var query2 = GetAlerts(i => i.OrganisationId == organisationId && (beginDate == null || i.CreatedAt <= endDate) &&
                (endDate == null || i.CreatedAt >= beginDate)).ToList();

    return await ....//What to call the GetAlerts method?
                .ToListAsync();
}

1 Ответ

2 голосов
/ 29 марта 2020

Это асинхронно:

var query2 = GetAlerts(i => i.OrganisationId == organisationId && (beginDate == null || i.CreatedAt <= endDate) && (endDate == null || i.CreatedAt >= beginDate));

return await query2.ToListAsync();

Как уже упоминал @weichch, GetAlerts ничего не выполняет в базе данных :

Entity Framework Core предоставляет набор расширенных асин c методов, похожих на методы LINQ, которые выполняют запрос и возвращают результаты. Примеры включают ToListAsyn c (), ToArrayAsyn c (), SingleAsyn c (). Не существует asyn c версий некоторых операторов LINQ, таких как Where (...) или OrderBy (...), потому что эти методы только формируют дерево выражений LINQ и не вызывают выполнение запроса в базе данных. .

...