Domine o EF Core: Guia Prático para Acesso a Dados
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!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!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!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!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!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!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!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!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!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!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!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!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!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
4. Cuidados de Segurança e Performance🔄 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!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!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!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!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!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!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.:
- Consultas
🎲 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. Complexas: Se o LINQ
🔍 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. não oferece flexibilidade suficiente ou gera queries pouco eficientes.
- Operações Específicas de Banco: Você pode precisar de recursos
📡 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. específicos do SQL
📝 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. que o EF Core
🌍 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. não traduz bem.
- Stored Procedures Legadas: Se a equipe de DBAs já criou procedimentos que não deseja (ou não pode) refatorar.
- Views e Funções
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.: Quando
📊 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. você precisa se comunicar com objetos de banco além de tabelas e relacionamentos usuais.
Apesar disso, é importante usar Raw SQL📝 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!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!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!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!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!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!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!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!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!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!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!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!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!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!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!)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
. Se a stored procedure não retornar colunas que mapeiem exatamente para a entidade, é comum criar🔢 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.
📡 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!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!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!)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!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!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:
Sempre use parâmetros🎯 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)!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:
- Queries complexas podem se tornar difíceis de ler e manter. Documente bem quando
📊 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. o ORM
🗂️ 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. não é suficiente.
4. Transações:
Lembre-se de que, se sua consulta🎲 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!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..
Ao escrever manualmente, você assume a responsabilidade de otimizar o SQL📝 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!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!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 Retorno | Caso de Uso | Exemplo |
---|---|---|
Entidades Mapeadas | Quando o SQL retorna colunas compatíveis com a entidade | FromSqlRaw<Produto>(...) |
DTOs Personalizados | Para projeções específicas ou stored procedures | SqlQuery<RelatorioDTO>(...) |
Tipos Anônimos | Consultas 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:- Controle total sobre a query
- Acesso a funcionalidades específicas do SGBD
- Performance
🔄 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! otimizada para casos críticos
- Compatibilidade
🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance. com procedimentos armazenados
- Potencial para SQL Injection
🚫 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. se mal utilizado
- Perda de abstração do ORM
🗂️ 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.
- Dificuldade de manutenção
- Possíveis problemas de compatibilidade
🧠 Memory Management Avançado: Domine Span<T> e MemoryMarshal!Transforme seu código C# usando Span<T> e MemoryMarshal para manipulação eficiente de memória, reduzindo alocações desnecessárias e elevando a performance. entre bancos
⚠️ 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🔗
// ❌ 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!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!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!)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 ...
Use ferramentas como o 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!)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!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:
- Vendas
🎲 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. por categoria
- Média
🎲 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. móvel de 7 dias
- Comparativo com período anterior
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!)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!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!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!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🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/