EINFÜHRUNG · LINQ-SOURCEGENERATOReQuantic.Linq.SourceGeneratoreQuantic.Linq.SourceGenerator ist die Kompilierzeit-Hälfte von eQuantic.Linq: er schreibt mit Roslyn die Spezifikationen, Filter und Sortierer, die eine markierte Klasse braucht.
Überblick
Nichts wird per Reflection ermittelt, während eine Anfrage wartet: die Kosten wandern in den Build und die Fehler in den Compiler.Er verlangt .NET 6 oder neuer, steht neben dem Hauptpaket und wird per Attribut konfiguriert: eines an der Klasse, eines an jeder Eigenschaft, die Operatoren bekommen soll.
Installieren
shell
dotnet add package eQuantic.Linq.SourceGenerator
Was sie tut
Keine Reflection zur LaufzeitJede Spezifikation entsteht beim Bauen, sodass die Anfrage nichts dafür zahlt, herauszufinden, was abzufragen ist.
Fehler beim SchreibenWas er erzeugt, sind echte Mitglieder: sie werden vervollständigt, und ein Name, den es nicht gibt, ist ein Kompilierfehler und kein leeres Ergebnis.
Konfiguration per AttributZwei Attribute: für welche Klassen erzeugt wird und welche Operatoren jede Eigenschaft bekommt.
Er passt zum BestehendenEr arbeitet mit eQuantic.Linq, mit Entity Framework und mit allem anderen, das einen Ausdruck annimmt.
Keine Reflection zur LaufzeitJede Spezifikation entsteht beim Bauen, sodass die Anfrage nichts dafür zahlt, herauszufinden, was abzufragen ist.
Fehler beim SchreibenWas er erzeugt, sind echte Mitglieder: sie werden vervollständigt, und ein Name, den es nicht gibt, ist ein Kompilierfehler und kein leeres Ergebnis.
Konfiguration per AttributZwei Attribute: für welche Klassen erzeugt wird und welche Operatoren jede Eigenschaft bekommt.
Er passt zum BestehendenEr arbeitet mit eQuantic.Linq, mit Entity Framework und mit allem anderen, das einen Ausdruck annimmt.
Schnellstart
Als Build-Abhängigkeit referenzieren — Er läuft beim Bauen und wird mit nichts ausgeliefert — genau das sagt PrivateAssets.
XML
<PackageReference Include="eQuantic.Linq" Version="1.6.0" /><PackageReference Include="eQuantic.Linq.SourceGenerator" Version="1.0.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets></PackageReference>
Markieren, was erzeugt werden soll — Das Attribut an der Klasse meldet sie an. Das an einer Eigenschaft wählt die Operatoren, die dort sinnvoll sind.
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; }}
Die geschriebenen Mitglieder nutzen — Sie sitzen an der markierten Klasse, sodass die Abfrage sich wie ein Satz über das Modell liest und nicht über die Tabelle.
C#
var cheapCoffee = Product.Specifications .NameContains("coffee") .And(Product.Specifications.PriceLessThan(10m)); var found = await _repository.GetAsync(cheapCoffee);
Öffentliche Schnittstelle
NAMENSRAUM
ÖFFENTLICHE SCHNITTSTELLE
GenerateSpecificationsAttribute
Markiert eine Klasse, für die der Generator Spezifikationen schreiben soll.
SpecPropertyAttribute
Sagt, welche Filteroperatoren eine Eigenschaft bekommen soll.
FilterOperator
Die Operatoren, die eine Eigenschaft erhalten kann: gleich, enthält, beginnt mit, größer als und die übrigen.
Lesen Sie lieber Code?
Jedes Paket ist MIT-lizenziert und öffentlich, und die Beispiele sind zum Kopieren bereit.
Bereit, etwas Echtes zu liefern?
Buchen Sie ein 30-minütiges Erstgespräch. Innerhalb einer Stunde sagen wir Ihnen, ob wir der richtige Partner sind — oder wer es ist.
Bereit, etwas Echtes zu liefern?
Buchen Sie ein 30-minütiges Erstgespräch. Innerhalb einer Stunde sagen wir Ihnen, ob wir der richtige Partner sind — oder wer es ist.
© 2026 eQuantic Tech. Alle Rechte vorbehalten.