Domine o Raw SQL no EF Core: Guia Completo e Prático

Imagine que você tem uma consulta🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. superespecífica, precisa bater direto em uma view ou até mesmo executar uma procedure legada que a sua equipe construiu anos atrás. Nesses casos, o Entity Framework Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. com LINQ pode não suprir todas as necessidades ou gerar consultas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. extremamente complexas. É nesse momento que o Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. entra em cena: ele permite que você escreva SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. na mão, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. ainda aproveite as vantagens de tracking, mapeamento de objetos e outras funcionalidades do EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real..

Abaixo, exploraremos quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. e por que usar o Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias., como executá-lo e quais cuidados você deve ter com performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos! e segurança ao misturar diretamente SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. no seu código .NET.

Tabela de Conteúdo🔗

1. Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Usar Raw SQL?

2. Executando Consultas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. Raw SQL

3. Chamando Stored Procedures

4. Cuidados de Segurança e Performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!

5. Métodos para Executar🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. SQL no EF Core

6. Mapeamento de Resultados Complexos

7. Vantagens e Riscos do Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias.

8. Boas Práticas🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. na Execução de SQL

9. Caso Real📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.: Relatório de Vendas Complexo

Quando Usar Raw SQL?🔗

Algumas situações em que você pode considerar o Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. no EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real.:

Apesar disso, é importante usar Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. com parcimônia. Quanto mais você se afasta do modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. de queries do EF, mais você perde a vantagem de um ORM🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!🗂️ Entity Framework Core: ORM que Faz Mágica com seu Banco!Aprenda a dominar o EF Core e simplifique suas operações de banco de dados com LINQ, migrações e mapeamentos automáticos, sem precisar escrever SQL. que gerencia mudanças de contexto, tracking, e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. otimizações automáticas.

Executando Consultas Raw SQL🔗

Para consultas🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. de leitura, o EF Core oferece métodos como FromSqlRaw e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. FromSqlInterpolated. Ambos permitem escrever comandos🔍 Comandos: Desacople Ações dos Botões!🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. diretamente, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. com diferentes níveis de segurança🛡️ Segurança em SignalR: Autenticação e Autorização!🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real..

Exemplo Prático

Suponha que você queira recuperar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. produtos com Stock abaixo de um limite estabelecido:

// Exemplo de uso de FromSqlRaw
using (var contexto = new MeuDbContext())
{
    var limite = 10;
    var produtosComPoucoEstoque = contexto.Produtos
        .FromSqlRaw("SELECT * FROM Produtos WHERE Stock < {0}", limite)
        .ToList();
    foreach (var produto in produtosComPoucoEstoque)
    {
        Console.WriteLine($"Produto: {produto.Nome}, Estoque: {produto.Stock}");
    }
}

Observe que utilizamos "{0}" para indicar parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. que serão passados de forma segura, evitando SQL Injection🚫 SQL Injection: Proteja suas Queries de Ataques Maliciosos!🚫 SQL Injection: Proteja suas Queries de Ataques Maliciosos!Aprenda a defender seu banco de dados utilizando técnicas como parameterized queries, ORM, validação e stored procedures contra SQL Injection.. Já no caso de FromSqlInterpolated, ficaria assim:

using (var contexto = new MeuDbContext())
{
    var limite = 10;
    var produtosComPoucoEstoque = contexto.Produtos
        .FromSqlInterpolated($"SELECT * FROM Produtos WHERE Stock < {limite}")
        .ToList();
    // Resto do código igual
}

Nesse caso, o EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. faz o binding interno desses parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código., mantendo a proteção necessária.

Chamando Stored Procedures🔗

Muitas aplicações antigas (ou mesmo modernas) armazenam lógica de negócio em stored procedures. Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! chamá-las:

var codigoProduto = 5;
using (var contexto = new MeuDbContext())
{
    var resultadoProcedure = contexto
        .Produtos
        .FromSqlRaw("EXEC MinhaStoredProcedure @CodigoProduto = {0}", codigoProduto)
        .ToList();
    // Processar resultado
}

Nesse exemplo, MinhaStoredProcedure retorna dados compatíveis com a entidade Produto🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados.. Se a stored procedure não retornar colunas que mapeiem exatamente para a entidade, é comum criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. modelos🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. específicos ou utilizar DTOs📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!📦 DTOs: Transforme Dados sem Bagunçar seu Modelo de Domínio!Descubra como os DTOs protegem o domínio, otimizam a comunicação entre camadas e garantem a segurança e eficiência nas integrações de sua API. para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! manter o código organizado.

Cuidados de Segurança e Performance🔗

Usar Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. é poderoso, mas📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. exige atenção a alguns pontos:

1. SQL Injection🚫 SQL Injection: Proteja suas Queries de Ataques Maliciosos!🚫 SQL Injection: Proteja suas Queries de Ataques Maliciosos!Aprenda a defender seu banco de dados utilizando técnicas como parameterized queries, ORM, validação e stored procedures contra SQL Injection.:

Sempre use parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código.. Jamais concatene strings diretamente com valores do usuário.

2. Mapeamento de Entidades:

Verifique se as colunas retornadas pela query batem exatamente com as propriedades⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. da entidade. Caso contrário, crie modelos específicos.

3. Manutenção:

4. Transações:

Lembre-se de que, se sua consulta🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. fizer parte de uma operação maior, gerenciar transações pode ser mais trabalhoso do que em queries via LINQ🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!🔍 LINQ Básico: Filtre Dados como um Garimpeiro Digital!Descubra como o LINQ facilita o processamento de dados em C#. Filtre, ordene e transforme coleções com precisão e eficiência no seu código..

5. Performance🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!🔄 StringBuilder: Quando Concatenar Strings Vira um Pesadelo!Descubra como o StringBuilder otimiza a concatenação em C#, evitando desperdício de memória e melhorando a performance das aplicações. Veja exemplos práticos!:

Ao escrever manualmente, você assume a responsabilidade de otimizar o SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias.. Ferramentas de profiling e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. análise de plano de execução são suas aliadas.

Métodos para Executar SQL no EF Core🔗

FromSqlRaw - Para consultas

// Consulta parametrizada (proteção contra SQL Injection!)
var pedidos = await context.Pedidos
    .FromSqlRaw("""
        SELECT * FROM Pedidos
        WHERE ClienteId = {0}
        AND Status = {1}
        """, clienteId, statusPedido)
    .Include(p => p.Itens)
    .ToListAsync();

ExecuteSqlRawAsync - Para comandos

// Atualização em massa (muito mais rápido que LINQ)
var linhasAfetadas = await context.Database.ExecuteSqlRawAsync(
    "UPDATE Produtos SET Preco = Preco * 1.1 WHERE CategoriaId = {0}",
    categoriaId);

SqlQuery (EF Core 7+) - Para tipos arbitrários

// Mapeando para DTO
var relatorio = await context.Database.SqlQueryRaw<RelatorioVendasDTO>(
    "EXEC GetSalesReport @startDate, @endDate",
    new SqlParameter("startDate", startDate),
    new SqlParameter("endDate", endDate))
    .ToListAsync();

Mapeamento de Resultados Complexos🔗

O EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. permite mapear resultados SQL para diferentes estruturas:

Tipo de RetornoCaso de UsoExemplo
Entidades MapeadasQuando o SQL retorna colunas compatíveis com a entidadeFromSqlRaw<Produto>(...)
DTOs PersonalizadosPara projeções específicas ou stored proceduresSqlQuery<RelatorioDTO>(...)
Tipos AnônimosConsultas rápidas (útil para testes)context.Database.SqlQueryRaw<int>("SELECT COUNT() FROM ...")

Exemplo avançado com junções:

public class PedidoDetalhadoDto
{
    public int PedidoId { get; set; }
    public string ClienteNome { get; set; }
    public decimal Total { get; set; }
}
var query = """
    SELECT p.Id AS PedidoId, c.Nome AS ClienteNome, SUM(i.Quantidade * i.Preco) AS Total
    FROM Pedidos p
    JOIN Clientes c ON p.ClienteId = c.Id
    JOIN ItensPedido i ON p.Id = i.PedidoId
    GROUP BY p.Id, c.Nome
    """;
var resultados = await context.Database
    .SqlQueryRaw<PedidoDetalhadoDto>(query)
    .ToListAsync();

Vantagens e Riscos do Raw SQL🔗

Vantagens: Riscos:
⚠️ Para QAs: Testes de segurança são cruciais em queries SQL! Verifiquem sempre a parametrização.

Boas Práticas na Execução de SQL🔗

1. Sempre use parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código.

// ❌ Perigoso!
.FromSqlRaw($"SELECT * FROM Users WHERE Name = '{name}'")
// ✅ Seguro
.FromSqlRaw("SELECT * FROM Users WHERE Name = {0}", name)

2. Mantenha o SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. versionado

Armazene suas queries críticas como arquivos .sql no projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.

3. Use comentários para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! documentação

/* RELATÓRIO DE VENDAS POR REGIÃO
   Versão 1.2 - 2024-03
   Autor: Equipe Analytics */
SELECT ...

4. Monitore o desempenho⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs.

Use ferramentas como o SQL Server🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. Profiler mesmo para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! queries raw

Caso Real: Relatório de Vendas Complexo🔗

Contexto: Sistema de e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-commerce precisa gerar relatório com:

Solução com Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias.:

var sql = """
    WITH SalesData AS (
        SELECT
            p.CategoriaId,
            DATE_TRUNC('day', o.DataPedido) AS Dia,
            SUM(i.Quantidade * i.Preco) AS TotalVendas
        FROM Pedidos o
        JOIN ItensPedido i ON o.Id = i.PedidoId
        JOIN Produtos p ON i.ProdutoId = p.Id
        WHERE o.DataPedido BETWEEN {0} AND {1}
        GROUP BY p.CategoriaId, DATE_TRUNC('day', o.DataPedido)
    )
    SELECT
        c.Nome AS Categoria,
        AVG(sd.TotalVendas) OVER (
            PARTITION BY sd.CategoriaId
            ORDER BY sd.Dia
            ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
        ) AS MediaMovel7Dias,
        LAG(sd.TotalVendas, 7) OVER (PARTITION BY sd.CategoriaId ORDER BY sd.Dia) AS ComparacaoPeriodoAnterior
    FROM SalesData sd
    JOIN Categorias c ON sd.CategoriaId = c.Id
    ORDER BY sd.Dia DESC
    """;
var relatorio = await context.Database
    .SqlQueryRaw<RelatorioVendasComplexoDTO>(sql, startDate, endDate)
    .ToListAsync();

Para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! devs legados: Notem como o EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. moderno mantém a conexão aberta apenas durante a execução, diferente do antigo SqlConnection manual!

Dominar o Raw SQL📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!📝 SQL Básico: SELECT, INSERT, UPDATE e DELETE para Sobreviver!Aprenda os comandos cruciais de SQL para manipular dados em bancos relacionais com exemplos práticos, dicas e boas práticas para livrarias. no EF Core🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. é como ter um passe de emergência: você não quer usar sempre, mas quando precisa, salva seu projeto! Equilibre com as funcionalidades do ORM para manter seu código tanto eficiente quanto sustentável. 🚀

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados