Ich frage mich, ob es möglich ist, diese Expression-Builder-Klasse zu verwenden, um dynamische Lambda-Ausdrücke zu generieren, wobei der zu filternde Typ zur Kompilierungszeit nicht bekannt ist.Erstellen von LINQ-Ausdrücken dynamisch mit unbekannten Typen
Ich habe eine Methode, die die Expressionskonstrukte,
public static Expression<Func<T, bool>> GetExpression<T>(IList<QueryFilter> filters)
Und ein Queryfilter-Objekt,
public class QueryFilter
{
public string PropertyName { get; set; }
public ExpressionType OpType { get; set; }
public object Value { get; set; }
}
Wo Sie einen neuen Ausdruck erzeugen können, die Aufgabe T filtert die QueryFilters verwenden, die in übergeben werden Ich möchte eine Methode entwickeln, bei der der Typ nicht bekannt ist, d.
public static Expression<Func<T,bool>> GetExpression(IList<QueryFilter> filters, Type type)
So kann ich den Typen als Parameter, von Anrufen zu System.Reflection passieren, anstatt es in Code angeben zu müssen. Zum Beispiel etwas in diesen Zeilen,
public static Expression NewExpression(IList<QueryFilter> filters, Type T)
{
return GetExpression<Type>(filters);
}
Wenn es möglich ist, diese Syntax zu verwenden, wo Type das generische 'T' ersetzt? Da ich mich glaube nicht, dass eine Laufzeit dynamisch Typen innerhalb der <> Klammern angeben kann, gibt es eine andere Art und Weise, vielleicht
mitFunc<object,bool>
statt?
verwenden, danke. Ein Problem, das mir aufgefallen ist, ist jedoch, dass, wenn Sie die Zeichenfolgendarstellung eines Binary-Lambda-Ausdrucks für "TimeOfAction> @ 0" angeben, die .ToString() -Darstellung des erstellten Ausdrucks "GreaterThan" oder "LessThan" statt der entsprechenden angibt Symbol. Wie kann ich die binäre Operation dynamisch festlegen? – sean
Sorry ich weiß nicht, vielleicht sollten Sie eine andere Frage stellen –