जवाब से रोब और जॉन स्कीट एक समस्या है।
आप x => Convert(x.PropertyName)
की तरह कुछ मिलता है, लेकिन अक्सर ASP.NET MVC के लिए उदाहरण के लिए यदि आप चाहते हैं इस x => x.PropertyName
की तरह एक अभिव्यक्ति तो Expression.Convert
"प्रदूषण" कुछ मामलों के लिए अभिव्यक्ति है।
समाधान:
public static class LambdaExpressionExtensions
{
public static Expression<Func<TInput, object>> ToUntypedPropertyExpression<TInput, TOutput> (this Expression<Func<TInput, TOutput>> expression)
{
var memberName = ((MemberExpression)expression.Body).Member.Name;
var param = Expression.Parameter(typeof(TInput));
var field = Expression.Property(param, memberName);
return Expression.Lambda<Func<TInput, object>>(field, param);
}
}
उपयोग:
Expression<Func<T, DateTime>> expression = ...;
Expression<Func<T, object>> expr = expression.ToUntypedPropertyExpression();
@JonSkeet Expression.Convert हमेशा एक अच्छा विचार नहीं है। मेरा जवाब देखें – Rookian