我使用Unity3D中的siaqodb插件来管理我的数据库游戏。
该插件使用System.LINQ库,我遇到了一个特定的问题:
代码:
var query = (from T t in siaqodb where t.Id == 1 select t);
return query.ToList<T> ()[0];
效果很好!没关系!太好了!
但是代码:
int a = 1;
var query = (from T t in siaqodb where t.Id == a select t);
return query.ToList<T> ()[0]
此代码引发异常: ArgumentException:字段句柄和类型句柄不兼容。
答案 0 :(得分:0)
我刚刚使用以下代码解决了我的问题:
var query = (from T t in siaqodb select t);
return query.ToList<T> ().Where (t => t.Id == id).ToList ()[0];
这不是很漂亮,但我可以避免ArgumentException,我相信它发生在来自siaqodb的Reflection代码......
答案 1 :(得分:0)
我也遇到了这个错误,问题在于,通用类型和Lamda表达式在SQLite中是不兼容的。该表达式使用Generic基本类型或接口,并尝试从DB获取它,但您不存储Base类型或接口,而是存储派生类型。如果使用lambda,则必须使用与DB表匹配的正确类型。