Resumo : neste tutorial, você aprenderá como usar o Where()
método EF Core para filtrar dados com base em uma ou mais condições.
Usaremos a Employee
entidade que mapeia a Employees
tabela no banco de dados para a demonstração:
Usando o método Where() com o operador igual
O exemplo a seguir usa o Where()
método LINQ para localizar funcionários cujo primeiro nome seja "Alexander"
:
using static System.Console;
using HR;
using var context = new HRContext();
var employees = context.Employees
.Where(e => e.FirstName == "Alexander")
.ToList();
foreach (var e in employees)
{
WriteLine($"{e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Saída:
Alexander Young
Alexander Green
Linguagem de código: C# ( cs )
Neste exemplo, o EF Core gera um SQL que usa uma WHERE
cláusula para localizar funcionários cujo primeiro nome seja "Alexander"
:
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[FirstName] = N 'Alexander'
Linguagem de código: C# ( cs )
Observe que o EF Core não parametriza a consulta e passa a string literal "Alexander"
para o SQL. É vulnerável a ataques de injeção de SQL.
No entanto, se você usar uma variável em vez de uma string literal, o EF Core parametrizará a consulta que pode proteger o aplicativo contra injeções de SQL. Por exemplo:
using static System.Console;
using HR;
using var context = new HRContext();
var firstName = "Alexander";
var employees = context.Employees
.Where(e => e.FirstName == firstName)
.ToList();
foreach (var e in employees)
{
WriteLine($"{e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Neste exemplo, o EF Core parametriza a consulta da seguinte forma:
-- [Parameters=[@__firstName_0='Alexander' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[FirstName] = @__firstName_0
Linguagem de código: C# ( cs )
Usando o operador AND
Para consultar dados usando várias condições e combinar a condição usando o AND
operador, você usa && no Where()
método.
Por exemplo, o seguinte usa o Where()
método para localizar funcionários cujo nome Alexander
e sobrenome são Young
:
using static System.Console;
using HR;
using var context = new HRContext();
var firstName = "Alexander";
var lastName = "Young";
var employees = context.Employees
.Where(e => e.FirstName == firstName
&& e.LastName == lastName)
.ToList();
foreach (var e in employees)
{
WriteLine($"{e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Saída:
Alexander Young
Linguagem de código: C# ( cs )
O EF Core gera um SQL que usa uma WHERE
cláusula com um AND
operador:
-- [Parameters=[@__firstName_0='Alexander' (Size = 4000), @__lastName_1='Young' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[FirstName] = @__firstName_0
AND [e].[LastName] = @__lastName_1
Linguagem de código: C# ( cs )
O exemplo a seguir usa o &&
operador para localizar funcionários que ingressam na empresa entre 3/1/2023
e 3/31/2023
:
using HR;
using var context = new HRContext();
var startDate = new DateTime(2023, 3, 1);
var endDate = new DateTime(2023, 3, 31);
var employees = context.Employees
.Where(e => e.JoinedDate >= startDate && e.JoinedDate <= endDate)
.ToList();
foreach (var e in employees)
{
Console.WriteLine($"{e.FirstName} {e.LastName} - {e.JoinedDate.ToShortDateString()}");
}
Linguagem de código: JavaScript ( javascript )
Saída:
Michael Johnson - 3/5/2023
Alexander Young - 3/18/2023
Sofia Thomas - 3/17/2023
Chloe Young - 3/5/2023
Levi Gonzalez - 3/24/2023
O EF Core gera a seguinte instrução SQL:
-- [Parameters=[@__startDate_0='2023-03-01T00:00:00.0000000', @__endDate_1='2023-03-31T00:00:00.0000000'], CommandType='Text', CommandTimeout='30']
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[JoinedDate] >= @__startDate_0
AND [e].[JoinedDate] <= @__endDate_1
Linguagem de código: PHP ( php )
Usando o operador OR
Para consultar dados usando múltiplas condições e combiná-los usando o OR
operador, você usa o ||
no Where()
método.
using static System.Console;
using HR;
using var context = new HRContext();
var firstName = "Emily";
var lastName = "Brown";
var employees = context.Employees
.Where(e => e.FirstName == firstName || e.LastName == lastName)
.ToList();
foreach (var e in employees)
{
WriteLine($"{e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Saída:
Emily Brown
Emily Harris
Ethan Brown
Linguagem de código: C# ( cs )
O EF Core gera um SQL que usa uma WHERE
cláusula com um OR
operador:
-- [Parameters=[@__firstName_0='Emily' (Size = 4000), @__lastName_1='Brown' (Size = 4000)], CommandType='Text', CommandTimeout='30']
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[FirstName] = @__firstName_0
OR [e].[LastName] = @__lastName_1
Linguagem de código: C# ( cs )
Resumo
- Use
Where()
o método LINQ para filtrar dados. - Use
&&
para formar umAND
operador. - Use
||
para formar umOR
operador.