嘿那里 - 简单查询:
var q = (from SomeObject o in container
where
o.SomeInt > 8
&& o.SomeString != null //Null Ref here
select o;
我总是得到一个空引用异常。
如果我使用String.IsNullOrEmpty(o.SomeString),查询大约需要100倍,就像我使用&& o.SomeString!=“”(这样更快,但显然不正确)。
我猜是因为DB4o需要激活对象,以便将它们传递给IsNullOrEmpty调用,并且不能使用索引。
我的问题是,在这种情况下检查空值的更好方法是什么?有没有像:mystring!= Db4o.DBNull.Value,还是什么?
干杯, 戴夫
答案 0 :(得分:3)
实际上您的查询应该没有任何问题。你的查询应该运行正常。它也不应该要求任何激活。 db4o尝试translate the queries into SODA-Queries并避免激活对象。
您使用的是哪个版本的db4o?在LINQ-Queries中有a bug which导致NullRefrence-Exception。它应该是固定的。
您是否已将Db4objects.Db4o.Linq.dll程序集添加到项目中。单声道组件是否存在?
我会尽量避免使用String.IsNullOrEmpty,因为我会阻止查询优化。只要您使用查询调用复杂方法,优化程序就无法将查询转换为SODA。然后你基本上运行LINQ to Objects,这在大型数据集上会很慢。