EF Core Onde está

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 INpermite verificar se um valor corresponde a uma lista de valores. Para formar uma consulta que utiliza o INoperador você usa Contains()o método LINQ.

Usaremos a Employeeentidade que mapeia a Employeestabela 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 JohnsonLinguagem de código:  C#  ( cs )

O EF Core gera um SQL que usa o INoperador na WHEREclá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 INoperador na WHEREclá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 INoperador na WHEREcláusula para retornar todas as linhas da Employeestabela 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 o INoperador na WHEREcláusula.
  • Use o operador de negação lógica ( !) para formar o NOT INoperador.

Deixe um comentário

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