Ich muss einen Ausdrucksbaum erstellen, der Expression<Func<TDataStructure, Double[]>> expression
zurückgibt. Das heikelste daran ist, dass TDataStructure
generisch ist, was impliziert, dass jede übergebene Klasse unterschiedliche Eigenschaften enthält. Ich brauche Eigenschaften des Typs Double?
und Namen beginnend mit bestimmten Zeichenfolge, wie "output"
.Wie erstellt man einen Ausdrucksbaum, der basierend auf der Konvention einen eingeschränkten Satz von Eigenschaften zurückgibt?
Einfaches Beispiel Fall (Betonklasse):
Expression<Func<ConcreteDataStructure, Double[]>> expression =
structure => new Double[] {
structure.inputProperty1.Value,
structure.outputProperty1.Value,
structure.outputProperty2.Value
};
wo: structure.inputProperty1.Value
, structure.outputProperty1.Value
, structure.outputProperty2.Value
vom Typ sind Doppel?
Mein Fall:
Ich weiß nicht, wie viele Eigenschaften des Typs
Double?
sind inTDataStructure
muss ich nur diese vom Typ
Double?
, erhalten mit"output"
StartAusdruck wird in
IQueryable<TDataStructure> Select
Methode für die Projektion von jedem Sequenzelement in neue Form verwendet werden.
Beide 1 und 2 können mit Reflexion gelöst werden: Blick auf 'Type.GetProperties()' oder 'TypeInfo.GetProperties()' (je nachdem, welche Reflection-API Sie verwenden). –
Das weiß ich. Aber ich weiß nicht, wie ich es in Expression verwenden soll. var properties = typeof (Trainieren Data die Trainieren) .GetProperties() .Where (property => property.PropertyType == typeof (Doppel) && property.Name.ToLowerInvariant() Starts ("Produkt")?!.); – Marek
@Marek: Richtig, also, sobald Sie die Eigenschaften gefunden haben, die Sie verwenden möchten, können Sie 'Expression.Property' verwenden, um einen Ausdruck für jede dieser Eigenschaften zu erstellen ... –