我有一个Expression<Func<T,DateTime>>,我想取表达式的DateTime部分,并从中提取月份。所以我会把它变成一个Expression<Func<T,int>>,我不太确定该怎么做。我看了看ExpressionTree Visitor,但我不能让它像我需要的那样工作。以下是DateTime表达式的示例
DateTimeExpression http://img442.imageshack.us/img442/6545/datetimeexpression.png
下面是我想要创建MonthExpression http://img203.imageshack.us/img203/8013/datetimemonthexpression.png的一个示例
看起来我需要创建一个新的MemberExpression,它由DateTime表达式中的Month属性组成,但我不确定。
发布于 2010-03-04 15:20:42
是的,这正是您想要的-使用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;
}
}https://stackoverflow.com/questions/2377452
复制相似问题