INTRODUCCIÓN · LINQ-SOURCEGENERATOReQuantic.Linq.SourceGeneratoreQuantic.Linq.SourceGenerator es la mitad en tiempo de compilación de eQuantic.Linq: escribe las especificaciones, los filtros y los ordenadores que necesita una clase marcada, con Roslyn.
Resumen
Nada se resuelve por reflexión mientras una petición espera, así que el coste se traslada a la compilación y los errores al compilador.Requiere .NET 6 o posterior, se coloca al lado del paquete principal y se configura por atributo: uno en la clase y uno en cada propiedad que deba recibir operadores.
Instalar
shell
dotnet add package eQuantic.Linq.SourceGenerator
Qué hace
Sin reflexión en ejecuciónCada especificación se escribe al compilar, así que la petición no paga nada por averiguar qué consultar.
Errores mientras escribeLo que genera son miembros reales: se autocompletan, y un nombre que no existe es un error de compilación y no un resultado vacío.
Configuración por atributoDos atributos: para qué clases generar y qué operadores debe recibir cada propiedad.
Encaja con lo que ya hayFunciona con eQuantic.Linq, con Entity Framework y con cualquier otra cosa que acepte una expresión.
Sin reflexión en ejecuciónCada especificación se escribe al compilar, así que la petición no paga nada por averiguar qué consultar.
Errores mientras escribeLo que genera son miembros reales: se autocompletan, y un nombre que no existe es un error de compilación y no un resultado vacío.
Configuración por atributoDos atributos: para qué clases generar y qué operadores debe recibir cada propiedad.
Encaja con lo que ya hayFunciona con eQuantic.Linq, con Entity Framework y con cualquier otra cosa que acepte una expresión.
Inicio rápido
Referenciarlo como dependencia de compilación — Se ejecuta al compilar y no se distribuye con nada: eso es lo que dice PrivateAssets.
Marcar qué debe generarse — El atributo de la clase la incorpora. El de una propiedad elige los operadores que a esa propiedad le convienen.
C#
[GenerateSpecifications]public class Product{ public int Id { get; set; } [SpecProperty(FilterOperators = FilterOperator.Equals | FilterOperator.Contains)] public string Name { get; set; } = string.Empty; [SpecProperty(FilterOperators = FilterOperator.GreaterThan | FilterOperator.LessThan)] public decimal Price { get; set; }}
Usar los miembros que escribió — Están en la clase que marcó, así que la consulta se lee como una frase sobre el modelo y no sobre la tabla.
C#
var cheapCoffee = Product.Specifications .NameContains("coffee") .And(Product.Specifications.PriceLessThan(10m));var found = await _repository.GetAsync(cheapCoffee);
Superficie pública
NAMESPACE
SUPERFICIE PÚBLICA
GenerateSpecificationsAttribute
Marca una clase para la que el generador debe escribir especificaciones.
SpecPropertyAttribute
Dice qué operadores de filtro debe recibir una propiedad.
FilterOperator
Los operadores que se pueden dar a una propiedad: igual, contiene, empieza por, mayor que y los demás.
¿Prefieres leer código?
Todos los paquetes son MIT y públicos, y los ejemplos son para copiar y pegar.