Je suis en train de créer une bibliothèque pour une API REST afin de pouvoir interroger dynamiquement les documents d'une base de données Mongo.Création d'une expression dynamique <Func <TIn, TOut>> à partir d'une chaîne
On suppose l'entité Person
suivante:
public class Person
{
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
}
Maintenant, je veux créer un Expression<Func<TInput, TOutput>>
qui fait référence à un champ dynamique.
Supposons une méthode qui accepte 2 chaînes, 1 représentant le champ d'interroger et d'un représentant la valeur, cette méthode pourrait ressembler à:
public Expression<Func<TInput, TOutput>> Create<TInput, TOutput>(string fieldName, string fieldValue)
{
}
Lorsque la méthode ci-dessus est appelée avec une seule propriété telle que Name
, une expression peut être construite relativement facilement:
var parameter = Expression.Parameter(typeof(Person), string.Empty);
var field = Expression.PropertyOrField(parameter, "Name");
var expression = Expression.Lambda<Func<Person, string>>(field, parameter);
Mais comment puis-je construire une expression qui expose un champ intégré tel que Address.Street
?
Sincères salutations
Avez-vous eu l'occasion de regarder OData? –
Vous devriez partager comment vous voudriez utiliser cette API. C'est plus susceptible de vous obtenir une réponse – Dbl
Je pense que [this] (https://stackoverflow.com/a/45745858/5359302) serait utile pour vous. Vous pouvez vérifier comment il récupère la propriété avec plus d'un niveau d'imbrication. –