Gegeben ein Expression<Func<TEntity, bool>>
entlang der Zeilen von
Ich versuche, eine Listeneigenschaftsbedingung nach Typ zu extrahieren, d. h.
%Vor% Bisher habe ich ein ExpressionVisitor
erstellt und die Methode VisitBinary
als diejenige identifiziert, in die ich mich einfügen möchte, um meine Informationen zu erhalten.
Ich bin immer noch ratlos gegenüber
BinaryExpression
, die ich betrachte, eine terminale Aussage darstellt (in dem Sinne, dass es keine verschachtelten Ausdrücke mehr gibt, die ich mir ansehen muss) BinaryExpression
beschäftigt ist ExpressionVisitor
-Methoden überschreiben muss, um Fälle abzudecken, die ich noch nicht berücksichtigt habe. Nicht sicher, was wirklich der Anwendungsfall ist, aber hier ist ein Anfangspunkt
%Vor% Die Idee ist einfach. Überschreiben Sie die Methode Visit
nur, um einen Stapel Verarbeitungsausdrücke zu verwalten. Die Hauptverarbeitung befindet sich innerhalb der VisitMember
override, die für jedes Property / Feld-Accessor aufgerufen wird. Die node.Expression.NodeType != ExpressionType.Constant
wird verwendet, um die Closure-Elemente zu eliminieren, während die zweite Bedingung die Auflistungseigenschaften eliminiert. Schließlich wird der Ausdruck der potentiellen Bedingung aus dem Stapel extrahiert.
Das Ergebnis enthält sowohl MemberExpression
als auch Expression
, wo es verwendet wird. MemberExpression.Expression.Type
ist Ihr Entitätstyp, MemberExpression.Member
ist die Eigenschaft / das Feld dieses Typs.
Beispieltest:
%Vor%Tags und Links c# lambda expression expression-trees expressionvisitor