4 Stimmen

Erstellen Sie dynamischen Linq-to-Sql-Lambda-Ausdruck

Ich suche derzeit nach einer Möglichkeit, wie ich einen Lambda-Ausdruck für meine Linq-to-SQL-Abfrage basierend auf Benutzereingaben zur Laufzeit erstellen kann. Ich habe im Internet gesucht, aber nichts Nützliches gefunden. Wenn jemand mir zeigen kann, wie das geht oder es gute Artikel dazu gibt, lassen Sie es mich bitte wissen. Vielen Dank!

Beispiel:

Angenommen, ich habe diese Linq-Abfrage:

var loc = (from l in Entity.Locations
           select l).Where(a => a.LocationId > 5);

Kann dieser Ausdruck a => a.LocationId > 5 zur Laufzeit erstellt werden? Je nachdem, ob der Benutzer LocationId ausgewählt hat. Wenn der Benutzer Name ausgewählt hat, wäre es a => a.Name == "bla".

Ich bin auf einen Artikel von Scott gestoßen, aber ich würde eine Lösung bevorzugen, die es mir ermöglicht, einen stark typisierten Ausdruck zu erstellen, mit dem ich mögliche Fehler zur Kompilierzeit erkennen kann.

Jede Information wäre sehr willkommen.

Danke.

2voto

Albin Sunnanbo Punkte 45302

Sie können neue LINQ-Ausdrücke erstellen, die alte Ausdrücke enthalten.

var loc = (from l in Entity.Locations select l);

if (hasLocation)
    loc = loc.Where(a => a.LocationId > 5);

if (hasName)
    loc = loc.Where(a => a.Name == "bla");

etc.

Der Ausdruck wird erst ausgewertet, wenn Sie ihn verwenden, z. B. var result = loc.ToList();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X