我有MethodCallExpression
,其中包含日期调用,如此
DateTime.UtcNow.AddDays(-10);
我希望能够将其编译为它所代表的实际日期,但由于我使用的是Xamarin,并且为iOS构建,我无法使用DynamicInvoke()方法由于AOT编译限制。
var expression = MyExpression;
if (expression.Type.Name == "DateTime")
{
// Can't do this. Even though it works in most cases
string result = Expression.Lambda( expression ).Compile().DynamicInvoke();
}
答案 0 :(得分:1)
所以,经过一些研究后我可以看出......没有办法在ExpressionVisitor中进行编译,只是因为它需要进行即时编译,这在iOS上是不允许的。
我们的另一种选择是接受此作为限制,并更改我们的查询。
var date = DateTime.UtcNow.AddDays(-10);
var actualExpression = TestExpression<UserModel>( u => u.CreatedDate == date );
现在我们在将代码传递到表达式树之前预先编译代码。
答案 1 :(得分:0)
AFAIK - 由于iOS上的limitations动态代码生成,您无法执行编译。你唯一的选择是某种翻译(也许是PaxScript?)
更新:paxScript页面显示该代码与Mono for Android兼容。尝试与WinRT和WP7 / 8兼容的版本。这些平台对iOS有类似的限制。