Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 35720|Resposta: 2

[Fonte] A diferença entre Expressão<Func<T, bool>> e Func<T, bool> em EF

[Copiar link]
Publicado em 26/09/2021 09:21:21 | | | |
Func<TObject, bool> é um delegado

Expressão<Func<TObject, bool>> são expressões

A expressão se tornará um delegado após a compilação antes de poder ser executada. Como o quê

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

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

Então você pode chamar o func:

func(5) //-retorna verdadeiro

func(200) //- retorna false

Expressões não podem ser chamadas diretamente.

Caso:Código de consulta incorreto causa uma consulta completa de tabela no banco de dados

O código de erro é o seguinte:

Passe uma variável do tipo Func como argumento para o método Count,O EF consulta todos os dados da tabela inteira e filtra da memória。 A instrução SQL gerada é assim:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executou DbCommand (8ms) [Parâmetros=[], CommandType='Text', CommandTimeout='30']
      SELECT [c]. [id], [c]. [client_type], [c]. [status], [c]. [inquilino]
      DE [tabela] COMO [c]
O código correto é o seguinte:

A escrita correta adiciona uma condição onde do banco de dados e então retorna diretamente o valor da contagem。 A instrução SQL gerada é assim:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executado DbCommand (4ms) [Parâmetros=[], CommandType='Text', CommandTimeout='30']
      SELECT COUNT(*)
      DE [tabela] COMO [c]
      ONDE [c]. [client_type] = 1


EF Core Série 4 analisa as instruções SQL geradas
https://www.itsvse.com/thread-9564-1-1.html
ef exibe as instruções SQL geradas
https://www.itsvse.com/thread-3813-1-1.html

Usando chamadas de delegado Func sãoSystem.Linq.EnumerableContagem abaixo

A expressão chamada com Expression<Func<T, bool>> éSystem.Linq.QueryableContagem abaixo



(Fim)





Anterior:[Pratique] Faça uma versão verde sem instalação do Java JDK Windows
Próximo:Java envia códigos de verificação por SMS através do Alibaba Cloud SMS SDK
Publicado em 26/09/2021 16:19:52 |
douto
Publicado em 26/09/2021 17:31:25 |
Sim, estou aqui para aprender de novo...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com