2015-10-10 16 views
5

Tôi đang sử dụng một API mà hy vọng một Expression<Func<T, object>>, và sử dụng này để tạo ra các ánh xạ giữa các đối tượng khác nhau:Tạo biểu từ PropertyInfo

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

Làm thế nào tôi có thể tạo cụm từ cần thiết từ một PropertyInfo? Ý tưởng là:

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

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

    Map(exp).To(name); 
} 

Trả lời

7

Bạn chỉ cần Expression.Property và sau đó bọc nó trong lambda. Một chút khó khăn là bạn cần phải chuyển đổi kết quả thành object, quá:

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

Cảm ơn, đã làm chính xác những gì tôi cần. – Didaxis

+0

Thực sự là "var property = Expression.Property (tham số, propInfo);" –

+0

@TamasIonut: Đã khắc phục, cảm ơn. –

Các vấn đề liên quan