我有以下情况:
我的WP7应用程序有一个登录屏幕,执行以下代码行:
var userQuery = DataAccessManager.Instance.Database.Select<LocalUser>(u => _userLogin.Equals(u.Login)); //_userLogin and Login property are strings
var lstUser = userQuery.ToList();
在某些情况下,我需要再次调用登录屏幕,它使用上面相同的代码行执行相同的方法。但是,在第二次调用
时出现以下错误var lstUser = userQuery.ToList();
Mobiltec.Atheneum.Common.Utils.Synchronization.AuthHandler + LT;&GT; c__DisplayClass2 USERLOGIN
在System.Reflection.RuntimeFieldInfo.GetValue(Object obj)
在System.Linq.jvm.ExpressionInterpreter.b _0(FieldInfo字段)
在System.Linq.jvm.Extensions.OnFieldOrProperty(MemberInfo self,Action 1 onfield, Action
1 onprop)
在System.Linq.jvm.ExpressionInterpreter.VisitMemberInfo(MemberInfo mi)
在System.Linq.jvm.ExpressionInterpreter.VisitMemberAccess(MemberExpression成员)
在System.Linq.jvm.ExpressionVisitor.Visit(表达式表达式)
在System.Linq.jvm.ExpressionInterpreter.VisitMethodCall(MethodCallExpression调用)
在System.Linq.jvm.ExpressionVisitor.Visit(表达式表达式)
在System.Linq.jvm.ExpressionInterpreter.Interpret(LambdaExpression lambda,Object []参数)
在System.Linq.jvm.Interpreter.Run(Object [] arg)
在System.Linq.jvm.Interpreter.FuncRunner [T,TResult](LocalUser arg)
at Perst.Database.LinqEnumerator 1.MoveNext()
at System.Collections.Generic.List
1..ctor(IEnumerable 1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)
在Mobiltec.Atheneum.Common.Utils.Synchronization.AuthHandler.Authenticate(String _userLogin,String _password,String deviceNickname)
在Mobiltec.Atheneum.Reader.WindowsPhone.Controls.LoginControl。&lt;&gt; c _DisplayClass4.b__0(对象状态)
在System.Threading.ThreadPool.WorkItem.doWork(Object o)
在System.Threading.Timer.ring()
有任何想法吗?我们在Silverlight to Desktop应用程序中拥有相同的类,我不知道为什么WP7会发生这种情况。
PS1:只有LocalUser类才会出现这个问题...它适用于任何类。
PS2:如果我使用它:
var userQuery = DataAccessManager.Instance.Database.Select<LocalUser>(u => "cesarautor@atheneum.com".Equals(u.Login)); //as sample...any dumb string works
而不是
var userQuery = DataAccessManager.Instance.Database.Select<LocalUser>(u => _userLogin.Equals(u.Login));
它有效......
提前致谢
答案 0 :(得分:1)
我找到了一些关于Perst和FieldAccessException的其他参考资料:例如http://forums.mcobject.com/index.php?showtopic=7916
猜测,这将是代码以某种方式尝试在该表达式上使用反射引起的 - 因为这将在Silverlight桌面的限制较少的环境中正常工作。
如果更改_userLogin引用而不是引用局部变量,它是否有效 - 因为这可能需要更少/不同的反射调用