EF Core 2.x - Operador Like : Propriedade EF.Functions
Hoje vou apresentar o recurso do operador Like diretamente no código da consulta usando o EF Core 2.x. |
Desde a versão 2.0 do Entity Framework Core temos disponível o recurso do operador Like que podemos usar em consultas.
Para isso usamos a propriedade EF.Functions que fornece métodos CLR que são traduzidos para funções de banco de dados quando usados em consultas LINQ to Entities.
Nota: Se você chamar esses métodos em outros contextos (por exemplo, LINQ to Objects) ira obter uma NotSupportedException.
Vamos ver isso funcionando na prática.
Vamos supor que já temos um banco de dados chamado Acervo e a tabela Musicas com a seguinte estrutura e alguns dados já inseridos:
Abaixo vemos o script SQL para criar a tabela Musicas:
USE [Cadastro]
GO
CREATE TABLE [dbo].[Musicas](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Artista] [nvarchar](50) NOT NULL,
[Titulo] [nvarchar](50) NOT NULL,
[Local] [nvarchar](100) NOT NULL,
CONSTRAINT [PK_Musicas] PRIMARY KEY CLUSTERED
(
[Id] ASC
)ON [PRIMARY]
GO
|
recursos usados:
- Visual Studio 2017 Community
- SQL Server 2012 Express
- Entity Framework Core 2.1
Criando o projeto no VS 2017 Community
Abra o VS 2017 Community e crie um novo projeto .NET Core do tipo Console App(.NET Core) chamado EFCore_Like.
Inclua no projeto a referência para o Microsoft.EntityFrameworkCore.SqlServer :
Observe que estou usando a versão 2.21, que é a versão mais estável, mas podemos usar a versão 2.1 ou superior.
Crie no projeto a pasta Model e nesta pasta inclua duas classes:
A seguir inclua o código abaixo na classe Musica que representa no nosso modelo de domínio:
1- Musica
namespace EFCore_Like.Models
{
public class Musica
{
public int Id { get; set; }
public string Artista { get; set; }
public string Titulo { get; set; }
public string Local { get; set; }
}
}
|
A seguir inclua o código abaixo na classe AppDbContext que representa o nosso contexto:
2- AppDbContext
using Microsoft.EntityFrameworkCore;
using System.Linq;
namespace EFCore_Like.Models
{
public class AppDbContext : DbContext
{
public DbSet<Musica> Musicas { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=Macoratti;Initial Catalog=Cadastro;Integrated Security=True");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Musica>()
.HasKey(e => e.Id);
}
}
}
|
Neste código definimos a propriedade DbSet<> mapeando para a tabela Musicas, e, definimos também a string de conexão com o banco de dados Cadastro.
O código no método OnModelCreating usa a Fluent API para mapear a propriedade Id como chave primária da tabela.
Agora vamos definir uma consulta SQL usando a propriedade EF.Functions onde podemos usar
No arquivo Program.cs inclua o código abaixo:
using EFCore_Like.Models;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using static System.Console;
namespace EFCore_Like
{
class Program
{
static void Main(string[] args)
{
using (var contexto = new AppDbContext())
{
var resultado = contexto.Musicas
.Where(m => EF.Functions.Like(m.Titulo, "%foni%"))
.ToList();
foreach(var musica in resultado)
{
System.Console.WriteLine( $"{musica.Artista} - {musica.Titulo}");
}
ReadLine();
}
}
}
}
|
Na consulta usamos a propriedade EF.Functions e o método de extensão Like onde aplicamos o filtro à propriedade Titulo da música usando os curingas % na expressão : "%foni%" que vai retornar todos os registros cuja coluna Titulo contenha o texto 'foni'.
Executando projeto temos o seguinte resultado:
Além do Like também podemos usar os seguintes métodos de extensão na propriedade EF.Functions:
Pegue o código completo do projeto aqui: EFCore_Like.zip
Salmos 111:2
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
EF Core - Iniciando com o Entity Framework Core - Macoratti
EF Core - Usando a abordagem DataBase First - Criando - Macoratti
EF Core - Apresentando o EF Core Power Tools - Macoratti
EF Core 2.0 - Scaffolding DbContext e Models usando CLI - Macoratti
ASP .NET Core - CRUD usando Blazor e Entity Framework ... - Macoratti
Curso Entity Framework Core 2.0 - Vídeo Aulas - Macoratti