RoyalCode.SmartSelector 0.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package RoyalCode.SmartSelector --version 0.3.0
                    
NuGet\Install-Package RoyalCode.SmartSelector -Version 0.3.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RoyalCode.SmartSelector" Version="0.3.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RoyalCode.SmartSelector" Version="0.3.0" />
                    
Directory.Packages.props
<PackageReference Include="RoyalCode.SmartSelector" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add RoyalCode.SmartSelector --version 0.3.0
                    
#r "nuget: RoyalCode.SmartSelector, 0.3.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package RoyalCode.SmartSelector@0.3.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=RoyalCode.SmartSelector&version=0.3.0
                    
Install as a Cake Addin
#tool nuget:?package=RoyalCode.SmartSelector&version=0.3.0
                    
Install as a Cake Tool

SmartSelector

Gerador/Source Generator para criar automaticamente proje��es (Expression<Func<TFrom, TDto>>), m�todos auxiliares e propriedades em DTOs, reduzindo drasticamente boilerplate em consultas LINQ / EF Core.

Principais Recursos

  • [AutoSelect<TFrom>]: gera express�o de sele��o, m�todo From, extens�es Select{Dto} / To{Dto}.
  • [AutoProperties] ou [AutoProperties<TFrom>]: gera propriedades simples automaticamente (primitivos, string, bool, DateTime, enum, struct, cole��es simples IEnumerable<T> desses tipos).
  • Flattening por conven��o: nomes concatenados em PascalCase resolvem cadeias aninhadas (ex.: CustomerAddressCountryRegionName ? a.Customer.Address.Country.Region.Name).
  • Exclus�o de propriedades: Exclude = [ nameof(Entity.Prop) ].
  • Diagn�sticos de compila��o para uso incorreto, tipos incompat�veis e conflitos.

Instala��o

<ItemGroup>
  <PackageReference Include="RoyalCode.SmartSelector" Version="x.y.z" />
  <PackageReference Include="RoyalCode.SmartSelector.Generators" Version="x.y.z" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>

Exemplo 1 � Proje��o Simples

[AutoSelect<User>, AutoProperties]
public partial class UserDetails { }

// Uso
var list = db.Users.SelectUserDetails().ToList();
var dto  = UserDetails.From(user);
var expr = UserDetails.SelectUserExpression; // reutiliz�vel / compon�vel

C�digo gerado (essencial):

public static Expression<Func<User, UserDetails>> SelectUserExpression => u => new UserDetails { Id = u.Id, Name = u.Name };
public static UserDetails From(User u) => (selectUserFunc ??= SelectUserExpression.Compile())(u);

Exemplo 2 � Objeto Aninhado + Exclus�o

[AutoSelect<Book>, AutoProperties(Exclude = [ nameof(Book.Sku) ])]
public partial class BookDetails
{
    public ShelfDetails Shelf { get; set; }
}

[AutoProperties<Shelf>]
public partial class ShelfDetails { }

Trecho gerado:

Shelf = new ShelfDetails { Id = a.Shelf.Id, Location = a.Shelf.Location },
Price = a.Price,
// Sku exclu�do

Exemplo 3 � Flattening Profundo

public class Order { public Customer Customer { get; set; } }
// Customer -> Address -> Country -> Region
[AutoSelect<Order>]
public partial class OrderDetails
{
    public string CustomerAddressCountryRegionName { get; set; }
}

Trecho da express�o:

CustomerAddressCountryRegionName = a.Customer.Address.Country.Region.Name

Regras de Flattening

  • Nome da propriedade = concatena��o PascalCase dos segmentos do caminho.
  • Sem necessidade de atributos extras.

Tipos Suportados em AutoProperties

  • Primitivos num�ricos, bool, string, char, DateTime / nullable simples
  • enum, struct
  • IEnumerable<T> onde T � suportado acima / enum / struct

Exclus�es

[AutoProperties<Product>(Exclude = [ nameof(Product.InternalCode), nameof(Product.Secret) ])]

Diagn�sticos Principais

  • Tipos inv�lidos ou classe n�o partial (RCSS000).
  • Propriedade n�o encontrada (RCSS001).
  • Tipos incompat�veis (RCSS002).
  • Uso incorreto de atributos (RCSS003RCSS005).

Limita��es Resumidas

  • Sem renome/alias expl�cito ainda (MapFrom).
  • Sem transforma��es de tipo (formatters / custom converters).
  • Desambigua��o de flattening limitada em colis�es de prefixo.

Boas Pr�ticas

  • Use nameof em Exclude.
  • Prefira consumir a express�o gerada para reutiliza��o e composi��o LINQ.
  • Para caminhos muito longos, avalie DTOs aninhados por clareza.

FAQ R�pido

Pergunta Resposta
Preciso configurar algo no runtime? N�o, pura gera��o de c�digo.
Funciona com EF Core? Sim, a express�o � traduz�vel.
Posso s� gerar propriedades? Sim: [AutoProperties<TFrom>].
Flattening precisa de atributo? N�o, � por nome.

Mais Informa��es

Documenta��o detalhada: ver docs.md no reposit�rio.


Happy coding!

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.0 94 1/16/2026
0.3.0 182 10/20/2025
0.2.0 180 10/9/2025
0.1.0 162 5/23/2025