Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 35720|Ответ: 2

[Источник] Разница между Expression<Func<T, bool>> и Func<T, bool> в EF

[Скопировать ссылку]
Опубликовано 26.09.2021 9:21:21 | | | |
Func<TObject, bool> — делегат

Expression<Func<TObject, bool>> — это выражения

Экспрессия становится делегатом после компиляции до того, как его можно будет запустить. Как что

Expression<Func<int, bool>> ex = x=>x < 100;

Func<int, bool> func = ex. Compile();

Тогда вы можете вызвать func:

func(5) //-возвращает true

func(200) //- возвращает false

Выражения нельзя вызывать напрямую.

Случай:Неправильный код запроса вызывает полную таблицу запроса к базе данных

Код ошибки следующий:

Передайте переменную типа Func в качестве аргумента методу Count,EF запрашивает все данные из всей таблицы и фильтрует их из памяти。 Сгенерированный SQL-оператор выглядит так:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Выполнено DbCommand (8 мс) [Parameters=[], CommandType='Text', CommandTimeout='30']
      ВЫБЕРИТЕ [c]. [id], [c]. [client_type], [c]. [статус], [c]. [арендатор]
      ИЗ [таблицы] AS [c]
Правильный код выглядит следующим образом:

Правильная запись добавляет условие where из базы данных и затем напрямую возвращает значение счёта。 Сгенерированный SQL-оператор выглядит так:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Выполнено DbCommand (4 мс) [Parameters=[], CommandType='Text', CommandTimeout='30']
      ВЫБРАТЬ СЧЁТ(*)
      ИЗ [таблицы] AS [c]
      ГДЕ [c]. [client_type] = 1


EF Core Series 4 рассматривает сгенерированные SQL-операторы
https://www.itsvse.com/thread-9564-1-1.html
ef отображает сгенерированные SQL-операторы
https://www.itsvse.com/thread-3813-1-1.html

Использование делегированных вызовов Func выполняетсяSystem.Linq.EnumerableСчитайте ниже

Выражение, называемое с Expression<Func<T, bool>> —System.Linq.QueryableСчитайте ниже



(Конец)





Предыдущий:[Практика] Сделайте зелёную версию Java JDK Windows без установки
Следующий:Java отправляет коды верификации SMS через Alibaba Cloud SMS SDK
Опубликовано 26.09.2021 16:19:52 |
учёный
Опубликовано 26.09.2021 17:31:25 |
Да, я здесь, чтобы учиться снова...
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com