Оператор ‘==’ не может быть применен к операндам типа ‘int’ и ‘Task’

#c# #async-await #asp.net-core-3.1

#c# #асинхронное ожидание #asp.net-core-3.1

Вопрос:

В ASP.NET В ядре 3.1 я пытаюсь сделать свои методы асинхронными.

Вот мой код:

 public async Task<int> GetMaxNews()
{
    return await _context.PNewses.MaxAsync(s => s.Id);
}
 

и я использую этот метод в этом фрагменте кода:

 public async Task<List<PNews>> LastNews()
{
    return await _context.PNewses.Where(s => s.Id == GetMaxNews()).ToList();
}
 

Я получаю эту ошибку:

Оператор ‘==’ не может быть применен к операндам типа ‘int’ и ‘Task’

Кто-нибудь может мне помочь? В чем проблема?

Комментарии:

1. На самом деле это не имеет особого смысла, по сути, вы пытаетесь вернуть список результатов с максимальным идентификатором. Идентификаторы обычно представляют собой кластеризованные и уникальные столбцы идентификаторов. В большинстве случаев будет только один. В каких случаях вы бы просто OrderByDescending тогда FirstOrDefault . если по какой-то странной причине вам это действительно нужно, было бы лучше сделать 2 обхода, получить максимальное значение, а затем where по этому максимуму

2. Как следует из сообщения об ошибке: GetMaxNews() возвращает a Task<int> , который вам нужно будет каким-то await образом получить в результате int

Ответ №1:

Вы не можете вызвать другую функцию в EF, сначала получите результат ‘GetMaxNews’, а затем используйте его. как показано ниже в примере кода:

 public async Task<int> GetMaxNews()
{
    return await _context.PNewses.MaxAsync(s => s.Id);
}


public async Task<List<PNews>> LastNews()
{
    int ResultOfGetMaxNews = await GetMaxNews();
    return await _context.PNewses.Where(s => s.Id == ResultOfGetMaxNews ).ToListAsync();
}

 

Ответ №2:

При вызове GetMaxNews() он возвращает a Task<Int> . Когда вы ожидаете выполнения задачи, вы получаете обратно int. Хотите что-то похожее на это…

 ... Where(s => s.Id == await GetMaxNews()) ...
 

Комментарии:

1. общедоступная асинхронная задача<Список<PNews>> LastNews() { возвращает await _context . PNewses. Где ( s => s.Id == ожидание GetMaxNews()). ToList(); }