2015-10-10 27 views
5

sto usando un'API che prevede un Expression<Func<T, object>>, e la utilizza per creare mappature tra i diversi oggetti:Crea Espressione da PropertyInfo

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

Come si crea l'espressione necessaria da un PropertyInfo? L'idea è:

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

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

    Map(exp).To(name); 
} 

risposta

7

Hai solo bisogno Expression.Property e poi avvolgerla in un lambda. Un po 'complicato è che è necessario per convertire il risultato a object anche:

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

Grazie, ha fatto esattamente quello che mi serviva a. – Didaxis

+0

È in realtà "var property = Expression.Property (parameter, propInfo);" –

+0

@TamasIonut: risolto, grazie. –