如何在成员表达式内部将datetime值转换为ToLocalTime



我有一个成员表达式(类型为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");

最新更新