I'm trying to build an dynamic expression from a string of property-names (given by the user) on an IQueryable named source
. This is what I have so far:
var parameter = Expression.Parameter(source.ElementType, "x");
var member = propertyChain.Split('.').Aggregate((Expression)parameter, Expression.PropertyOrField);
var selector = Expression.Lambda(member, parameter);
which will give me something like x => x.MainProperty.SubProperty
when the input would be MainProperty.SubProperty
.
I now need to add ToString()
to the expression selector
so it will produce the expression x => x.MainProperty.SubProperty.ToString()
which then can be passed into other methods.
How can this be done?
Edit 1
I'm trying to build a dynamic GroupBy
where the type of the key doesn't matter. But the property to group by can be of type Guid
, int
or something else. That's why I need to call ToString()
.
public static IEnumerable<IGrouping<T, string>>(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
}
Aucun commentaire:
Enregistrer un commentaire