예, 그게 당신이 원하는 것을 정확히 - 그리고 Expression.Property
를 사용하여 그렇게 할 수있는 가장 쉬운 방법입니다 :
Expression func = Expression.Property(existingFunc.Body, "Month");
Expression<Func<T, int>> lambda =
Expression.Lambda<Func<T, int>>(func, existingFunc.Parameters);
내가 그 괜찮해야한다 생각합니다. 이 간단한 테스트에서 작동합니다 :
using System;
using System.Linq.Expressions;
class Person
{
public DateTime Birthday { get; set; }
}
class Test
{
static void Main()
{
Person jon = new Person
{
Birthday = new DateTime(1976, 6, 19)
};
Expression<Func<Person,DateTime>> dateTimeExtract = p => p.Birthday;
var monthExtract = ExtractMonth(dateTimeExtract);
var compiled = monthExtract.Compile();
Console.WriteLine(compiled(jon));
}
static Expression<Func<T,int>> ExtractMonth<T>
(Expression<Func<T,DateTime>> existingFunc)
{
Expression func = Expression.Property(existingFunc.Body, "Month");
Expression<Func<T, int>> lambda =
Expression.Lambda<Func<T, int>>(func, existingFunc.Parameters);
return lambda;
}
}
어디에서 Expression Tree Viewer를 사용할 수 있습니까? Visual Studio 2010에서도 작동합니까? – MartinF
Linq 샘플과 함께 제공됩니다. 여기에 사용하는 좋은 예가 있습니다. http://linqinaction.net/blogs/jwooley/archive/2008/08/24/enabling-the-expression-tree-visualizer-in-visual-studio-2008.aspx I haven Studio 2010에서 시도했지만 2008 년에 작동하는 것으로 알고 있습니다. – Adam