Ich habe grundsätzlich eine generische Klasse namens DynamicServices. Die dynamicServices wird wie folgt aussehensql von Ausdrucksbäumen C#
class DynamicEntityServices<T>{
T GetById(Guid Id) { // get from db using ado.net dal
List<T> Search(SearchCondition searchCondition) { // filtering the data from the dal
}
nun, dass ich eine json Spec-Datei haben [im Grunde eine json Schemadatei, die die dynamische Einheit und seine Eigenschaft/types definiert
Während der Laufzeit ich die Verbraucher wollen von meinem Dienst zu bauen und mir eine Suchbedingung zu senden.
ich meine SQLDAL Umsetzung wie folgt
class DynamicEntityDAL<T>{
List<T> Search(SearchCondition condition){
StringBuilder query = new StringBuilder();
foreach(var field in condition.Fields){
query.Append(" "+field.Key+" like '%"+field.Value+"%' ")
und etwas ähnlich dem oben haben zur Zeit weiß ich, dass das obige Verfahren ist richtig, weil es praktische Grenzen dafür. Bitte beachten Sie, dass Ich mag würde, um tatsächlich einen Ausdruck in von dem Anrufer meines dynamischen Dienstes in der Suchbedingung geschickt bekommen und dann werde ich die Abfrage als wie unten
var filterExpr = new Expression()...
var paramterExpr = new ParameterExpression("categorystatus",true); // not the right ones, but will look similar to this.
var condition = new SearchCondition{ SearchExpression = filterExpr };
In DAL, I can try to convert the above to SQL using some expression visitor like
`string filterClause = ConvertToSql(condition.SearchExpression);`
Ich lese konstruieren kann und Dinge umzusetzen, aber als Meine JSON-Schemadateien sind dynamisch, ich kann EF nicht verwenden. Bitte schlagen Sie den richtigen Ansatz vor, damit meine Bibliothek den Ausdruck vom Aufrufer des Dienstes abrufen und ihn auch in T-SQL übersetzen und von db abfragen kann.
Wenn Sie nur besorgt sind, wie man SQL aus dem Standard Expression Tress erzeugt, dann würde [diese Antwort] (http://stackoverflow.com/a/7933938/3745022) für Sie von Nutzen sein. Wenn Sie wissen möchten, wie Sie diesen Ausdrucksbaum aus Ihrem nicht spezifizierten JSON erstellen, sollten Sie weitere Einzelheiten angeben. Für einfache Abfragen können Sie Ausdrucksbäume manuell erstellen. Wenn Ihr JSON jedoch etwas Komplexeres darstellt, wäre dies eine nichttriviale Aufgabe. –