2015-10-10 15 views
5

Ich verwende eine API, die eine Expression<Func<T, object>> erwartet, und verwendet diese Zuordnungen zwischen verschiedenen Objekten zu erstellen:Expression von Propertyinfo erstellen

Map(x => x.Id).To("Id__c"); // The expression is "x => x.Id" 

Wie kann ich die notwendigen Ausdruck von einem PropertyInfo erstellen? Die Idee dahinter ist:

var properties = typeof(T).GetProperties(); 

foreach (var propInfo in properties) 
{ 
    var exp = // How to create expression "x => x.Id" ??? 

    Map(exp).To(name); 
} 

Antwort

7

Sie nur Expression.Property müssen und es dann in einem Lambda-wickeln. Ein kniffliges Bit ist, dass Sie das Ergebnis auch in object konvertieren müssen:

var parameter = Expression.Parameter(x); 
var property = Expression.Property(parameter, propInfo); 
var conversion = Expression.Convert(property, typeof(object)); 
var lambda = Expression.Lambda<Func<T, object>>(conversion, parameter); 
Map(lambda).To(name); 
+0

Danke, tat genau, was ich es brauchte. – Didaxis

+0

Ist eigentlich "var property = Expression.Property (Parameter, propInfo);" –

+0

@TamasIonut: Fest, danke. –

Verwandte Themen