我有一个成员表达式(类型为System.Linq.Expressions.MemberExpression{System.Linq.Ixpressions.PropertyExpression}(
我需要比较;"天";以及";月份";将该表达式的DateTime值转换为Today’s Day/Month,但是在将我的表达式的值转换为LocalTime之后。我以UTC时间从数据库中检索它,在进行表达式比较之前,我需要将其转换为LocalTime。
我一直在努力寻找一种方法;ToLocalTime";在表达式上,但我只得到错误,下面是我的最新试验:
DateTime today = DateTime.UtcNow.ToLocalTime();
//create expressions for day and month
var todayDayExp = Expression.Constant(today.Day);
var todayMonthExp = Expression.Constant(today.Month);
MemberExpression valueToChange = //code that returns memberexpression
//Problem is in line below
var ExpressionValueAfterToLocalTime = Expression.Call(typeof(DateTime), "ToLocalTime", null, valueToChange );
var valueprop = Expression.Property(ExpressionValueAfterToLocalTime , "Value");
var xconnectDayValue = Expression.Property(valueprop, "Day");
var xconnectMonthValue = Expression.Property(valueprop, "Month");
Expression dayComparisonExpression = Expression.Equal(
xconnectDayValue, todayDayExp);
Expression monthComparisonExpression = Expression.Equal(
xconnectMonthValue, todayMonthExp);
Expression finalEx = Expression.AndAlso(dayComparisonExpression, monthComparisonExpression);
我在尝试获取ExpressionValueAfterToLocalTime的行上出现错误:"类型"System.DateTime"上不存在方法"ToLocalTime";
有人知道如何做到这一点吗?我需要做";ToLocalTime";在成员表达式的DateTime值上。
好的,所以我找到了如何将MemberExpression类型的UTC DateTime对象转换为本地时间:
var dateTimeValueMemberExpression = //custom function that gets my datetime member expression
//gets the value property from my member expression
var valueprop = Expression.Property(dateTimeValueMemberExpression , "Value");
//create "MethodInfo" separately to use in the "Expression.Call" function
MethodInfo methodInfo = typeof(DateTime).GetMethod("ToLocalTime");
var valueToLocalTimeMethodCallExp = Expression.Call(valueprop, methodInfo);
一旦我得到了";valueToLocalTimeMethodCallExp";我能够访问它的";"天";以及";月份";属性如下:
var xconnectDayValue = Expression.Property(valueToLocalTimeMethodCallExp, "Day");
var xconnectMonthValue = Expression.Property(valueToLocalTimeMethodCallExp, "Month");