Interpolação de strings em C#

A interpolação de strings é um recurso muito útil e expressivo do C# que facilita a criação de cadeias de caracteres dinâmicas. Ao invés de usar métodos como “String.Format” ou concatenar as partes utilizando o operador “+”, a interpolação permite que você insira diretamente expressões em uma string de maneira clara e legível.
Cache em memória no .NET

O cache em memória é uma técnica fundamental para melhorar o desempenho e a escalabilidade de aplicações.
Agrupando consultas com LINQ em C#

Uma das operações mais comuns e úteis no LINQ é o agrupamento de dados, funcionalidade fundamental quando você precisa organizar e sumarizar registros de acordo com certas chaves.
Primary constructors em C#

No desenvolvimento de software orientado a objetos, a inicialização de objetos é uma tarefa muito comum. No C#, a maneira tradicional de definir construtores pode se tornar verbosa, especialmente quando você precisa inicializar muitas propriedades. Para simplificar esse processo e tornar o código mais limpo e legível, o C# introduziu o conceito de construtores primários a partir da versão 12. Este artigo explora o que são construtores primários, como usá-los e as vantagens que eles oferecem. O que são construtores primários? Construtores primários são uma nova sintaxe para criar e inicializar objetos de forma mais concisa e direta. Ao utilizar construtores primários, você pode definir parâmetros de entrada diretamente na declaração da classe e o C# automaticamente cria e inicializa as propriedades correspondentes. Esse recurso visa reduzir a quantidade de código repetitivo e melhorar a clareza do código. Sintaxe básica Antes do C# 12, a definição de construtores em classes seguia um padrão mais tradicional e detalhado. Aqui está um exemplo de como os construtores eram definidos anteriormente: public class Pessoa { public string Nome { get; } public int Idade { get; } public Pessoa(string nome, int idade) { Nome = nome; Idade = idade; } } Neste caso, você precisa definir o construtor e, em seguida, inicializar manualmente as propriedades da classe. O código inclui um bloco de construtor que atribui valores aos campos ou propriedades da classe. Se você deseja criar uma classe imutável, onde as propriedades são somente leitura, você deve utilizar apenas “get” e omitir “set”, como no exemplo acima. No entanto, se a mutabilidade for um requisito, você pode definir as propriedades com “get” e “set” e inicializá-las através do construtor primário. Com o C# 12, a mesma classe pode ser definida de forma mais concisa usando construtores primários: public class Pessoa(string nome, int idade) { public string Nome { get; } = nome; public int Idade { get; } = idade; } Aqui, “nome” e “idade” são declarados diretamente na assinatura da classe, e as propriedades são inicializadas automaticamente, eliminando a necessidade de um bloco de construtor separado. Interagindo com herança Construtores primários também interagem com a herança de maneira que simplifica o código e mantém a clareza. Vamos ver um exemplo de como os construtores primários funcionam com herança public class Pessoa(string nome, int idade) { public string Nome { get; } = nome; public int Idade { get; } = idade; } public class Funcionario(string nome, int idade, string departamento) : Pessoa(nome, idade) { public string Departamento { get; } = departamento; } Aqui, “Funcionario” herda de “Pessoa” e adiciona uma nova propriedade “Departamento”. O construtor de “Funcionario” inclui os parâmetros do construtor de “Pessoa”, permitindo que valores sejam passados para o construtor da classe base. Isso permite uma inicialização limpa e direta dos membros da classe base e da classe derivada. Acelere a sua carreira conosco! Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui Conclusão Os construtores primários em C# 12 oferecem uma maneira eficiente e direta de criar e inicializar objetos, simplificando a sintaxe. Comparado ao método tradicional de definição de construtores, os construtores primários tornam a criação de classes mais intuitiva e menos verbosa. Embora existam diferenças importantes na forma como os construtores primários são tratados em classes, records e structs, o conceito oferece uma ferramenta poderosa para melhorar a clareza e a eficiência do código. Ao entender e aplicar construtores primários, você pode criar código mais limpo e de fácil manutenção, aprimorando a qualidade do desenvolvimento de software.
OpenAI Vision: Descrevendo imagens em C#

Neste artigo exploraremos como utilizar o serviço de Visão da OpenAI para entender e analisar imagens.
Executando stored procedures com Entity Framework

Neste artigo vamos explorar como executar stored procedures com e sem parâmetros.
Collection expressions: simplificando a criação de coleções em C#

Neste artigo exploraremos como as expressões de coleção funcionam.
Funções de agregação no LINQ

No contexto de bancos de dados, as funções de agregação são usadas para resumir e calcular valores a partir de um conjunto de dados. Elas são essenciais para obter informações gerais e estatísticas, como somas, médias, máximos e mínimos. Exemplos comuns incluem funções como “SUM”, “AVG”, MAX” e “MIN”, que ajudam a transformar dados brutos em informações úteis. Em C#, o LINQ (Language Integrated Query) oferece suporte a essas mesmas operações de agregação, mas integradas diretamente à linguagem. Com o LINQ, você pode aplicar métodos de agregação a coleções de dados de maneira intuitiva e eficiente. Neste artigo, vamos explorar esses métodos com exemplos práticos, demonstrando como utilizá-los para obter resultados específicos de maneira eficiente. Caso queira saber mais sobre métodos do LINQ, você pode acessar os artigos sobre “Três métodos LINQ essenciais para o desenvolvedor .NET” e “Métodos para recuperar um único registro no LINQ”. Max O método Max é utilizado para encontrar o maior valor em uma coleção de dados. O tipo de retorno desse método depende do tipo da coleção em que é aplicado. Por exemplo, se a coleção é de números inteiros, o retorno será um inteiro; se for de objetos, o retorno será um objeto. Esse método é útil em diversos cenários, como encontrar o preço mais alto de um produto ou o maior valor em uma lista de números. List numeros = new List { 10, 50, 30, 40, 20 }; int valorMaximo = numeros.Max(); Console.WriteLine($”O maior valor é: {valorMaximo}”); No exemplo acima, será retornado o valor 50, que é o maior elemento da lista. O método Max do LINQ é equivalente à função MAX no SQL, que é utilizada para encontrar o maior valor em uma coluna de uma tabela. Min O método Min funciona como o oposto do método Max, encontrando o menor valor em uma coleção. Isso pode ser útil para determinar, por exemplo, a data da primeira compra de um cliente, o início de um período específico, o menor valor de uma lista de produtos, etc. List datas = new List { new DateTime(2024, 3, 12), new DateTime(2024, 4, 21), new DateTime(2024, 2, 7) }; var primeiraData = datas.Min(); Console.WriteLine($”A primeira data é: {primeiraData.ToShortDateString()}”); Aqui, criamos um array de DateTime e após isso aplicamos o método Min para encontrar a menor data, que neste caso é 7 de fevereiro de 2024. É fácil perceber que este método se assemelha à função MIN da linguagem SQL. MaxBy e MinBy Enquanto os métodos Max e Min são úteis para encontrar valores máximos e mínimos avaliando o valor do próprio item da coleção como um todo, os métodos MaxBy e MinBy permitem encontrar o elemento completo que possui o valor máximo ou mínimo em uma determinada propriedade. Isso é particularmente útil quando você deseja obter o objeto completo que atende ao critério, e não apenas o valor avaliado. Por exemplo: List pessoas = new List { new Pessoa { Nome = “Ana”, Idade = 25 }, new Pessoa { Nome = “Carlos”, Idade = 30 }, new Pessoa { Nome = “Bianca”, Idade = 28 } }; Pessoa pessoaMaisVelha = pessoas.MaxBy(p => p.Idade); Pessoa pessoaMaisJovem = pessoas.MinBy(p => p.Idade); Console.WriteLine($”Pessoa mais velha: {pessoaMaisVelha.Nome}”); Console.WriteLine($”Pessoa mais jovem: {pessoaMaisJovem.Nome}”); No código acima, especificamos que queríamos encontrar a pessoa com a maior e a menor idade na lista usando a idade como parâmetro. A pessoa com a maior idade é o Carlos, com 30 anos e a mais jovem é a Ana, com 25 anos Count O método Count nos permite determinar o número de elementos em uma coleção. Ele pode ser usado de duas formas: para contar todos os elementos ou para contar apenas aqueles que atendem a um critério específico. O tipo de retorno desse método é um int, que representa a quantidade de itens contados. Para contar todos os elementos de uma coleção, você pode usar o método Count sem passar nenhum parâmetro. Esse uso é equivalente à função COUNT(*) no SQL, que conta todas as linhas de uma tabela. List numeros = new List { 10, 20, 30, 40, 50 }; int totalNumeros = numeros.Count(); Console.WriteLine($”Total de números: {totalNumeros}”); Neste caso, a variável totalNumeros receberá o valor 5, que é a quantidade de itens na lista. Para contar apenas os elementos que atendem a um critério específico, você pode usar uma expressão lambda como parâmetro do método Count. Essa abordagem é equivalente à função COUNT com uma cláusula WHERE no SQL, que conta o número de linhas que satisfazem uma condição. List pedidos = new List { new Pedido { Id = 1, Status = “Entregue” }, new Pedido { Id = 2, Status = “Pendente” }, new Pedido { Id = 3, Status = “Entregue” }, new Pedido { Id = 4, Status = “Cancelado” } }; int quantidadePedidosEntregues = pedidos.Count(p => p.Status == “Entregue”); Console.WriteLine($”Quantidade de pedidos entregues: {quantidadePedidosEntregues}”); Em nosso exemplo, apenas dois pedidos estão registrados como entregues Sum O método Sum é utilizado para calcular a soma dos valores em uma coleção. Dependendo do tipo de coleção e dos elementos que ela contém, você pode usar o método Sum de duas maneiras: para somar todos os valores diretamente ou para somar apenas uma propriedade específica dos objetos da lista. O tipo de retorno desse método é um decimal, int, ou outro tipo numérico, conforme o tipo dos elementos da coleção. Para calcular a soma de todos os valores em uma coleção, você pode usar o método Sum diretamente sem passar nenhum parâmetro. Esse uso é equivalente à função SUM no SQL, que calcula a soma de uma coluna de uma tabela. List valores = new List { 10, 20, 30, 40, 50 }; int totalValores = valores.Sum(); Console.WriteLine($”A soma dos valores é: {totalValores}”); No exemplo acima o Sum retornará o valor 150. Já para calcular a soma de uma propriedade específica, você pode passar uma expressão lambda como parâmetro para o método Sum: List vendas = new List { new Venda { Valor = 1000 }, new
.NET CLI: um guia rápido

A .NET CLI é a ferramenta de linha de comando padrão do ecossistema .NET. Por meio dela é possível criar, executar e até mesmo publicar projetos .NET utilizando apenas comandos no terminal, sem dependência de um IDE. Neste guia rápido traremos para você os principais recursos da .NET CLI, conhecimento que atualmente é fundamental para todo desenvolvedor .NET. O que é a .NET CLI As ferramentas de linha de comando, chamadas de CLI (Command-Line Interface), são aplicações que permitem realizar diferentes tarefas em um contexto por meio de comandos do terminal. Por não possuírem uma interface gráfica, elas são geralmente leves e oferecem a mesma experiência de uso em diferentes sistemas operacionais. Além disso, por funcionarem com base em comandos do terminal, elas podem ser usadas não apenas de forma manual, mas também como parte de fluxos automatizados, como esteiras de CI/CD. Algumas ferramentas desse tipo muito comuns entre os desenvolvedores são o apt-get, usado para o gerenciamento de pacotes no Linux; o npm e o yarn, gerenciadores de pacotes JavaScript; as interfaces docker e kubectl, respectivamente do Docker e do Kubernetes; além daquelas que acompanham frameworks e outras ferramentas de desenvolvimento, como ng (Angular), ionic (Ionic) e nest (Nest.js). Neste contexto, a .NET CLI é uma ferramenta multiplataforma que simplifica o ciclo de vida do desenvolvimento .NET. Ela pode ser acessada diretamente do prompt de comandos, tornando-a acessível e fácil de usar em diferentes sistemas operacionais, sem a dependência de um IDE. Sintaxe dos comandos A sintaxe dos comandos da .NET CLI é simples, dividida em três partes principais: dotnet comando argumentos “dotnet” é o executor, ou seja, a aplicação principal; em seguida temos o comando específico, que indica qual ação será realizada; por fim, vêm os argumentos e opções que fornecem ao comando as informações necessárias para seu funcionamento. Cada comando espera argumentos diferentes, que podem ser opcionais. Por exemplo, para criar um novo projeto de console em C#, utilizamos o comando: dotnet new console –language C# No comando acima: “dotnet” é o executor que chama a CLI do .NET. “new” é o comando específico que indica que queremos criar um novo projeto. “console” é um argumento que especifica o tipo de projeto que estamos criando, no caso, um projeto de console. “–language C#” é uma opção que define a linguagem de programação a ser utilizada no projeto, que neste caso é C#. Algumas opções possuem uma versão principal e uma abreviada. Por exemplo, a opção –help também pode ser passada como -h. Para verificar se você possui o .NET CLI instalado, basta abrir um prompt de comando e digitar “dotnet”. Isso exibirá informações sobre a versão instalada e os comandos disponíveis. Caso você ainda não tenha o .NET instalado, é possível obtê-lo através do site oficial da Microsoft. Explorando os comandos básicos Conseguindo ajuda Sempre que precisar de ajuda com algum comando da CLI do .NET, basta adicionar “-h” ou “–help” ao final do comando para exibir informações detalhadas sobre seu uso. Por exemplo, ao digitar “dotnet new -h”, você obterá uma lista de opções e argumentos disponíveis para o comando “new”, conforme mostrado abaixo: dotnet new -h Este comando exibirá uma descrição do comando “new”, incluindo as diferentes opções de templates que podem ser usados (como console, mvc, classlib, etc.), além das opções e argumentos específicos que podem ser aplicados a cada template. Esta funcionalidade é extremamente útil para explorar todas as capacidades da CLI e aprender rapidamente como utilizar novos comandos e opções. Criando um projeto Um dos primeiros passos ao iniciar um novo projeto é criar sua estrutura básica. Com a .NET CLI, isso é feito de maneira simples e direta. Por exemplo, para criar um novo projeto de console, utilize o comando: dotnet new console Cada comando normalmente assume alguns valores padrão para os argumentos. Por exemplo, ao executar o comando acima será criado um projeto cujo nome é o mesmo da pasta em que ele foi executado. Por exemplo, se o terminal está aberto na pasta C:MeuProjeto, o comando acima criará um projeto chamado MeuProjeto.csproj. Outro exemplo de valor padrão é a linguagem utilizada (C#). Caso deseje alterar, é possível informar a opção–language ou -lang. Para saber quais templates de projeto estão disponíveis, utilize o comando abaixo: dotnet new list Para cada template listado, você pode obter ajuda com o argumento -h a fim de entender quais outros argumentos podem ser informados. Gerenciando pacotes do Nuget Na maioria dos projetos em que trabalhamos é necessário utilizar pacotes do Nuget. Com a .NET CLI você pode adicionar um pacote da seguinte forma: dotnet add package NomeDoPacote Este comando deve ser executado na pasta em que se encontra o csproj e adiciona a referência ao pacote especificado no arquivo de projeto e baixa a versão mais recente do pacote NuGet. Se você precisar adicionar uma versão específica de um pacote, basta especificar a versão desejada usando a opção –version ou -v. Já para remover o pacote, basta usar o comando remove: dotnet remove package NomeDoPacote E à medida que o projeto cresce, é comum utilizarmos vários pacotes. Então, para listar todos os que estão instalados, basta executar: dotnet list package Este comando exibe uma lista de todos os pacotes instalados no projeto atual, incluindo informações sobre a versão do pacote e a origem (source) de onde o pacote foi obtido. Isso é útil para verificar rapidamente quais dependências estão sendo usadas em seu projeto. Por fim, para garantir que todas as dependências do projeto estejam corretamente instaladas e configuradas, utilize o comando: dotnet restore Esse comando utiliza o NuGet.exe por trás dos panos para restaurar todas as dependências listadas no arquivo de projeto .csproj. Ele verifica os pacotes NuGet necessários e os baixa para o diretório de pacotes local do projeto, garantindo que todas as bibliotecas e ferramentas necessárias estejam disponíveis para o desenvolvimento. Limpando e compilando o projeto Agora para manter seu ambiente de desenvolvimento limpo e garantir que o código seja compilado corretamente, você pode utilizar os seguintes comandos: dotnet clean
Colunas calculadas no Entity Framework

Neste artigo veremos como implementar colunas calculadas com o Entity Framework.