EF Núcleo COMO

Resumo : neste tutorial, você aprenderá como consultar dados com base na correspondência de padrões usando o EF Core EF.Functions.Like().

Introdução ao EF Core EF.Functions.Like()

No SQL, o LIKEoperador permite pesquisar valores que correspondam a um padrão específico usando caracteres curinga:

  • %corresponde a zero ou mais caracteres.
  • _corresponde a qualquer caractere único.

Para executar o LIKEoperador SQL no EF Core, você usa EF.Functions.Like()em conjunto com o Where()método LINQ.

Usaremos a Employeeentidade que mapeia a Employeestabela para demonstração:

Usando o caractere curinga %

O exemplo a seguir usa o EF.Functions.Like()para localizar funcionários cujo primeiro nome contém a substring "ac":

using Microsoft.EntityFrameworkCore;
using HR;


using var context = new HRContext();

var keyword = "%ac%";
var employees = context.Employees
                        .Where(e => EF.Functions.Like(e.FirstName, keyword))
                        .ToList();

foreach (var e in employees)
{
    Console.WriteLine($"{e.FirstName} {e.LastName}");
};Linguagem de código:  C#  ( cs )

Saída:

Jacob Turner
Jackson Evans
Jacob Lopez
Grace Allen
Jack WrightLinguagem de código:  texto simples  ( texto simples )

Nos bastidores, o EF Core gera um SQL que usa uma WHEREcláusula com o LIKEoperador:

-- [Parameters=[@__Format_1='%ac%' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT 
  [e].[Id], 
  [e].[DepartmentId], 
  [e].[FirstName], 
  [e].[JoinedDate], 
  [e].[Salary], 
  [e].[LastName] 
FROM 
  [Employees] AS [e] 
WHERE 
  [e].[FirstName] LIKE @__Format_1Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Para encontrar funcionários cujos nomes começam com a string da, você pode usar um caractere curinga %no final do padrão como este:

using Microsoft.EntityFrameworkCore;
using HR;


using var context = new HRContext();


var keyword = "da%";
var employees = context.Employees
                        .Where(e => EF.Functions.Like(e.FirstName, keyword))
                        .ToList();

foreach (var e in employees)
{
    Console.WriteLine($"{e.FirstName} {e.LastName}");
};Linguagem de código:  C#  ( cs )

Saída:

Daniel Clark
Daniel LewisLinguagem de código:  texto simples  ( texto simples )

O EF Core gera uma instrução SQL que usa o LIKEoperador da 'da%'seguinte maneira:

-- [Parameters=[@__Format_1='da%' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT 
  [e].[Id], 
  [e].[DepartmentId], 
  [e].[FirstName], 
  [e].[JoinedDate], 
  [e].[Salary], 
  [e].[LastName] 
FROM 
  [Employees] AS [e] 
WHERE 
  [e].[FirstName] LIKE @__Format_1Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Usando o caractere curinga _

Para encontrar funcionários cujos nomes correspondam a sequências que começam com "H", seguidas por qualquer caractere único, seguida de uma letra ne, em seguida, seguidas por qualquer sequência de zero ou mais caracteres, você pode combinar o curinga _com o curinga %:

using Microsoft.EntityFrameworkCore;
using HR;


using var context = new HRContext();


var keyword = "H_n%";
var employees = context.Employees
                        .Where(e => EF.Functions.Like(e.FirstName, keyword))
                        .ToList();

foreach (var e in employees)
{
    Console.WriteLine($"{e.FirstName} {e.LastName}");
};Linguagem de código:  C#  ( cs )

Saída:

Henry Lopez
Hannah Evans
Henry AdamsLinguagem de código:  C#  ( cs )

O EF Core gera a seguinte instrução SQL que usa uma cláusula WHERE com o operador LIKE:

-- [Parameters=[@__keyword_1='H_n%' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT 
  [e].[Id], 
  [e].[DepartmentId], 
  [e].[FirstName], 
  [e].[JoinedDate], 
  [e].[Salary], 
  [e].[LastName] 
FROM 
  [Employees] AS [e] 
WHERE 
  [e].[FirstName] LIKE @__keyword_1Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Resumo

  • Use o EF.Functions.Like()método para formar um LIKEoperador para consultar dados com base na correspondência de padrões.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *