Позвольте мне объяснить вам, что вы сделали и что вы пытаетесь сделать. Вы частично правы в отношении проблем производительности, связанных с ToList и ToListAsyn c, поскольку они в основном отвечают за загрузку объектов в память и их отслеживание.
Исходя из этого, если ожидается, что ваш запрос будет интенсивно обрабатывать легкие данные, вам не нужно улучшать код. однако, если это не так, существует много открытых подходов, каждый из которых имеет свои плюсы и минусы, и вы должны рассматривать и балансировать между ними для каждого случая, когда вы не хотите использовать двойные приложения - SQL запросы.
давайте будем более реалистичными c поговорим о вашем случае:
1 - мы предполагаем, что ваш метод требует много ресурсов (загрузка большого объема данных, интенсивно вызываемых или обоих)
2 - я вижу, что модификация слишком стати c путем обновления всех строк с помощью c.IsApprovedByAdmin = true; c.IsActive = true;
form (1) и (2), я предлагаю написать хранимую процедуру или ExexcuteSqlCammand (как Брайан Льюис предложил), что сделает это за вас
, потому что (3) хранимые процедуры, триггеры и все операции, основанные на SQL, трудно обслуживаемы и имеют большой потенциал для скрытых исключений , В вашем случае, однако, вы с меньшей вероятностью впадете в это, поскольку ваш код слишком базовый c, и вы могли бы снизить риск, создав свой запрос из динамических c элементов, таких как nameof (yourClassName, которое является именем таблицы) .YouProperty и тому подобное ...
В любом случае, это пример того, что идеального подхода не существует, и вы изучали каждый случай в отдельности.
Наконец, я не согласен с Расширения сторонних разработчиков, большинство из которых бесплатно предоставляются непрофессионалами и отслеживание вызванных ими исключений, являются кошмарами, а платные версии слишком дороги и не являются расширениями без исключений. Расширение 3d party больше ориентировано на сложное массовое обновление / удаление и / или огромные данные. например,
await Context.UpdateAsync(e=> new Catalog
{ Archived = e.LastUpdate >
DateTime.UtcNow.AddYears(-99)? false : true
});