Dev & EngARTIGO

.NET 11 : Novidades C# , LINQ e EF Core

.NET 11 : Novidades C# , LINQ e EF Core
Imagem: José Carlos Macoratti

Este artigo apresenta as principais novidades anunciadas com o .NET.NET113 conteúdosNovidades do .NET 9 – o tipo genérico OrderedDictionaryDev (Back & Front) · dez 2024Novidades .NET 10: novas formas de uso do .NET CLIDev (Back & Front) · dez 2025Novidades do .NET 5: implementando um proxy reverso com YARP + ASP.NET 5Dev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) 11 Preview 5 e C# 15, incluindo Union Types, Full Outer Joins no LINQ, avisos de assincronismo no EF Core e melhorias no Blazor e JSON Lines.

A Microsoft lançou o .NET 11 Preview 5. Esta ainda é uma versão de pré-visualização (Preview), portanto não a execute em produção. Mas se você quiser saber o que está por vir antes do lançamento oficial do .NET 11 em novembro, confira os principais destaques a seguir.

1. C# 15 ganha tipos Union (Discriminated Unions)

Esta é uma das novidades mais aguardadas do C# 15. Se você já usou TypeScript ou F# e sentia falta de discriminated unions no C#, esta é a atualização ideal.

typescript
public record class Cachorro(string Nome);
public record class Gato(int Vidas);

public union Pet(Cachorro, Gato);

static string Descrever(Pet pet) => pet switch
{
    Cachorro(string nome) => $"aachorro: {nome}",
    Gato(int vidas) => $"gato: {vidas}"
};


Agora, Pet é estritamente um Cachorro ou um Gato. O compilador sabe exatamente qual tipo está sendo manipulado, e a expressão switch torna-se exaustiva — nenhum caso default é necessário. Se você esquecer de tratar uma das opções, o compilador emitirá um aviso.

Há também um recurso relacionado chamado Closed Class Hierarchies (hierarquias de classe fechadas). Ao marcar uma classe base como closed, o compilador restringe a herança direta apenas ao mesmo assembly:

aspnet

/// Declara a classe base como closed (fechada)
public closed record class ResultadoPagamento;

// Subclasses derivadas que representam TODOS os cenários possíveis
public record class Sucesso(string TransacaoId) : ResultadoPagamento;
public record class Falha(string Motivo) : ResultadoPagamento;
public record class Pendente(DateTime Previsao) : ResultadoPagamento;

// Como a classe pai é 'closed', o compilador SABE que só existem esses 3 casos.
// Se você esquecer de tratar um deles, o código nem compila!
static string Processar(ResultadoPagamento resultado) => resultado switch
{
   Sucesso(var id) => $"Pagamento aprovado! ID: {id}",
   Falha(var motivo) => $"Erro no pagamento: {motivo}",
   Pendente(var data) => $"Aguardando processamento até {data:dd/MM/yyyy}"
};

 


A ideia é a mesma: comandos switch exaustivos e sem brechas para tipos não mapeados. A diferença em relação ao padrão abstract + sealed é que agora o próprio compilador consegue provar e impor o fechamento da hierarquia.

2. LINQ recebe suporte nativo a Full Outer Joins

Desenvolvedores SQLSQL64 conteúdosSQL Server – Como evitar SQL Injection?Data · mai 2019Azure SQL DB Managed InstanceData · abr 2019SQL Server – Como evitar SQL Injection? Pare de utilizar Query Dinâmica como EXEC(@Query)Data · abr 2019Ver tudo em Data utilizam FULL OUTER JOIN há décadas, mas as consultas LINQ em memória não possuíam um método direto para isso até agora.

aspnet
Produto[] catalogo =
[
  new("A100", "Teclado"),
  new("B200", "Mouse"),
];

Venda[] vendas =
[
  new("B200", 4),
  new("C300", 2),
];

IEnumerable<object> linhas = catalogo.FullJoin(
  vendas,
  produto => produto.Sku,
  venda => venda.Sku,
  (produto, venda) => new
  {
    Sku = produto?.Sku ?? venda!.Sku,
    Nome = produto?.Name ?? "(fora do catálogo)",
    Vendidos = venda?.Quantity ?? 0,
   });
   Pendente(var data) => $"Aguardando processamento até {data:dd/MM/yyyy}"
}; 

O método FullJoin retorna tanto os registros correspondentes quanto os não correspondentes de ambos os lados. Além do uso em memória, no EF Core esse método está disponível via Queryable, traduzindo o join diretamente no banco de dados.

3. EF Core: Avisos de assincronismo (EF1004) e SQL otimizado

O Entity Framework Core recebeu duas grandes melhorias no Preview 5:

Analisador EF1004: Alerta quando consultas assíncronas são executadas de forma síncrona (ex: chamando .Result ou .GetAwaiter().GetResult()), prevenindo deadlocks sob carga pesada em produção.

Tradução de SQL mais limpa: A geração de consultas reduz subconsultas e JOINs desnecessários, gerando comandos SQL mais diretos e eficientes.

4. System.Text.Json e suporte a JSON Lines (NDJSON)

O formato JSON Lines (onde cada linha representa um objeto JSON independente) é amplamente utilizado em streams de logs e pipelines de dados.

Agora é possível serializar diretamente para esse formato utilizando o parâmetro topLevelValues: true:

aspnet
await JsonSerializer.SerializeAsyncEnumerable(
    stream,
    GetReadings(),
    topLevelValues: true);

Isso elimina a necessidade de formatar quebras de linha manualmente ou gerenciar colchetes de array.

5. APIs Genéricas em Random e novidades no SDK e Blazor

A classe Random ganhou métodos genéricos como NextInteger<T>() e NextBinaryFloat<T>(), facilitando a geração de números aleatórios em algoritmos genéricos sem a necessidade de castings ou checagens de tipo.

Além disso, o SDK traz:

Modelo MCPMCP7 conteúdosArquitetura de Sistemas Cognitivos: Integração de RAG, MCP e LLMs no Ecossistema .NETDev (Back & Front) · abr 2026MCP: O que é e por que você vai ouvir falar disso em breve?AI · jul 2025Agentes de IA com LLMs de Código Aberto: Integração Prática com o Model Context Protocol (MCP)AI · ago 2025Ver tudo em AI Server: Suporte nativo via dotnet new para criar servidores baseados no Model Context Protocol para integração com IA.

Checagem de vulnerabilidades no Build: Avisos automáticos durante a compilação caso pacotes NuGet possuam CVEs conhecidos ou estejam em fim de vida (EOL).

Melhorias no Blazor: Validação client-side no Blazor SSR sem necessidade de interatividade total, compatibilidade do QuickGrid com SSR estático e o novo atributo SupplyParameterFromSession.

Conclusão:

O .NET 11 e o C# 15 continuam evoluindo com foco em produtividade, segurança de código e desempenho. Se quiser testar esses recursos, baixe o SDK do .NET 11 Preview 5 e experimente as novidades em um projeto de testes antes do lançamento final em novembro.

é referência em Visual Basic no Brasil e autor dos livros "Aprenda Rápido: ASP" e "ASP, ADO e Banco de Dados na Internet". Mantenedor do site macoratti.net.

Ver perfil