Je tente de générer une expression dynamique à partir d'une chaîne de noms de propriété (donnée par l'utilisateur) sur un IQueryable nommé source
. C'est ce que j'ai jusqu'à présent:Appel de ToString() sur une expression de génération dynamique
var parameter = Expression.Parameter(source.ElementType, "x");
var member = propertyChain.Split('.').Aggregate((Expression)parameter, Expression.PropertyOrField);
var selector = Expression.Lambda(member, parameter);
qui me donne quelque chose comme x => x.MainProperty.SubProperty
lorsque l'entrée serait MainProperty.SubProperty
.
Je dois maintenant ajouter ToString()
à l'expression selector
afin qu'il produise l'expression x => x.MainProperty.SubProperty.ToString()
qui peut ensuite être passé dans d'autres méthodes.
Comment cela peut-il être fait?
Modifier 1
Je suis en train de construire une dynamique GroupBy
où le type de la clé n'a pas d'importance. Mais la propriété de groupe peut être de type Guid
, int
ou autre chose. C'est pourquoi je dois appeler ToString()
.
public static IEnumerable<IGrouping<string, T>>(IQueryable<T> source, string propertyChain)
{
var parameter = Expression.Parameter(source.ElementType, "x");
var member = propertyChain.Split('.').Aggregate((Expression)parameter, Expression.PropertyOrField);
var selector = Expression.Lambda(member, parameter);
// currently here I have x => x.MainProperty.SubProperty
// here I would Invoke the GroupBy of IQueryable with T and string via reflection
}
Pouvez-vous donner un exemple de travail? –
@JeroenvanLangen J'ai ajouté un exemple de ce que je vais accomplir au moins avec ce – KingKerosin