Frage

Was ist der beste Weg, dynamisch LINQ-Abfragen und Lambda-Ausdrücke zu schreiben?

Ich denke dabei an Anwendungen, bei denen die Endbenutzer Business-Logik-Regeln entwerfen können, die dann ausgeführt werden müssen.

Es tut mir leid, wenn dies ein Neuling Frage, aber es wäre toll, Best Practices aus Erfahrung.

War es hilfreich?

Lösung

Ich kann höher nicht empfehlen, als Sie durch die Nachrichten von Bart De Smet Lesen ( http: // Gemeinschaft. bartdesmet.net/blogs/bart/ ), er ist wirklich brillant, wenn es um Lambda kommt.

Seine jüngste Serie abgedeckt dynamisches Lambda, mit http://community.bartdesmet.net/blogs/bart/archive/2008/08/26/to-bind-or-not-to -bind-dynamic-Ausdruck-Bäume-teil~~POS=TRUNC 0.aspx

Absolut schön Code.

Andere Tipps

Eine andere Möglichkeit ist eine Skriptlaufzeit in das Programm zu integrieren, so dass die Benutzer die Business-Logik in einem DSL schreiben kann. Ironpython wäre ein Kandidat.

Ich kann auf zwei Arten sehen können Sie dynamisch LAMBDA erzeugen. Sie könnten versuchen, Reflection.Emit IL (die .Net-Bytecode) direkt zu erzeugen und sie als Lambda anrufen oder Sie die System.CodeDom und Microsoft.CSharp.CSharpCodeProvider verwenden können Sie den Code aus höheren Ebene Konstrukte zu erzeugen. Was wollen Sie tun, hängt davon ab, wie Sie den Benutzer zur Eingabe wollen dieses Zeug. Wenn Sie der Benutzer wünschen C # zu schreiben, dann können Sie nur die in Compilers gebaut verwenden.

Erstellen von Linq sollte dynamisch einfacher sein. Sie sollten LINQ-Abfragen als Ausdruck Bäume in Laufzeit generieren können und sie dann in ein IQueryable passieren auszuführen. Ich würde Sie auf IQueryable Blick in die Dokumentation vorschlagen mehr darüber zu erfahren. Eine andere Möglichkeit wäre, ein paar LINQ-Abfragen vordefinieren und dann den Benutzer an die Kette sie zusammen ermöglichen. Dies sollte praktikabel sein, da jede Linq Abfrage ein IEnumerable zurückgibt, die von der nächsten Linq Abfrage verbraucht werden kann.

Lambda-Ausdrücke können einfach über das System.Linq.Expressions Namespace erstellt werden.

System.Linq.Expressions ist, was du brauchst. Ich habe eine schöne Benutzeroberfläche geschrieben, die Benutzer definieren und bauen Abfragen dynamisch in der Form eines Ausdrucksbaums können. Sie können diese dann zu Linq2SQL oder Client Ihrer Wahl Hand ab.

Ich verstehe nicht, was meinst du mit „best way“ zu sagen. Es wäre besser, einfaches Beispiel zu geben, was Sie erreichen wollen. dynamischen LINQ Ausdruck Komponieren ist nicht schwer, aber schwierig.

Hier ist ein Beispiel für dynamische Linq Ausdruck Schöpfung:

Wie komponiere ich bestehende Linq-Ausdrücke

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top