Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 35720|Отговор: 2

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

[Копирай линк]
Публикувано в 26.09.2021 г. 9:21:21 ч. | | | |
Func<TObject, bool> е делегат

Експресия<Func<TObject, bool>> са изрази

Експресията ще стане делегат след компилацията, преди да може да бъде изпълнена. Като какво

Експресия<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 (8ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      ИЗБЕРЕТЕ [c]. [id], [c]. [client_type], [c]. [статус], [c]. [наемател]
      ОТ [таблица] AS [c]
Правилният код е следният:

Правилното писане добавя условие where от базата данни и след това директно връща стойността на броя。 Генерираното SQL изявление изглежда така:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Изпълнен DbCommand (4ms) [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