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 LIKE
operador 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 LIKE
operador SQL no EF Core, você usa EF.Functions.Like()
em conjunto com o Where()
método LINQ.
Usaremos a Employee
entidade que mapeia a Employees
tabela 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 Wright
Linguagem de código: texto simples ( texto simples )
Nos bastidores, o EF Core gera um SQL que usa uma WHERE
cláusula com o LIKE
operador:
-- [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_1
Linguagem 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 Lewis
Linguagem de código: texto simples ( texto simples )
O EF Core gera uma instrução SQL que usa o LIKE
operador 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_1
Linguagem 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 n
e, 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 Adams
Linguagem 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_1
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use o
EF.Functions.Like()
método para formar umLIKE
operador para consultar dados com base na correspondência de padrões.