Resumo : neste tutorial, você aprenderá como usar o EF Core WHERE IN para verificar se um valor corresponde a uma lista de valores.
Introdução ao EF Core Where In
O operador SQL IN
permite verificar se um valor corresponde a uma lista de valores. Para formar uma consulta que utiliza o IN
operador você usa Contains()
o método LINQ.
Usaremos a Employee
entidade que mapeia a Employees
tabela para demonstração:
Por exemplo, para encontrar funcionários cujo ID está em uma lista de IDs 1, 2 e 3, você pode usar o Contains()
método a seguir:
using Microsoft.EntityFrameworkCore;
using HR;
using var context = new HRContext();
int[] ids = { 1, 2, 3 };
var employees = context.Employees
.Where(e => ids.Contains(e.Id))
.ToList();
foreach (var e in employees)
{
Console.WriteLine($"{e.Id} - {e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Saída:
1 - John Doe
2 - Jane Smith
3 - Michael Johnson
Linguagem de código: C# ( cs )
O EF Core gera um SQL que usa o IN
operador na WHERE
cláusula da seguinte forma:
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[LastName],
[e].[Salary]
FROM
[Employees] AS [e]
WHERE
[e].[Id] IN (1, 2, 3)
Linguagem de código: C# ( cs )
NÃO EM
Para reverter o Contains()
método, você usa o operador de negação lógica ( !
). Neste caso, o EF Core irá gerar um SQL que utiliza um NOT
IN
operador na WHERE
cláusula:
using Microsoft.EntityFrameworkCore;
using HR;
using var context = new HRContext();
int[] ids = { 1, 2, 3 };
var employees = context.Employees
.Where(e => !ids.Contains(e.Id))
.ToList();
foreach (var e in employees)
{
Console.WriteLine($"{e.Id} - {e.FirstName} {e.LastName}");
}
Linguagem de código: C# ( cs )
Saída:
4 - Emily Brown
5 - William Taylor
6 - Olivia Anderson
7 - Benjamin Lee
...
Linguagem de código: C# ( cs )
O SQL gerado usa o NOT
IN
operador na WHERE
cláusula para retornar todas as linhas da Employees
tabela onde id não está nas listas 1, 2 e 3:
SELECT
[e].[Id],
[e].[DepartmentId],
[e].[FirstName],
[e].[JoinedDate],
[e].[Salary],
[e].[LastName]
FROM
[Employees] AS [e]
WHERE
[e].[Id] NOT IN (1, 2, 3)
Linguagem de código: C# ( cs )
Resumo
- Use
Contains()
o método LINQ para formar oIN
operador naWHERE
cláusula. - Use o operador de negação lógica (
!
) para formar oNOT
IN
operador.