Я имею Expression
Я хочу принять участие DateTime выражения и осуществить Месяц его. Таким образом, я превратил бы его в a Expression
Я не действительно уверен, как сделать это. Я посмотрел на Посетителя ExpressionTree, но я не могу заставить это работать как, мне нужно. Вот пример Выражения DateTime
DateTimeExpression http://img442.imageshack.us/img442/6545/datetimeexpression.png
Вот пример того, что я хочу создать MonthExpression http://img203.imageshack.us/img203/8013/datetimemonthexpression.png
Похоже, что я должен создать новый MemberExpression, который составлен из свойства Month от выражения DateTime, но я не уверен.
Да, это именно то, что вы хотите - и использование 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;
}
}