DB4o Linq查询 - 如何检查空字符串

时间:2010-06-17 11:16:33

标签: .net linq string null db4o

嘿那里 - 简单查询:

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,还是什么?

干杯, 戴夫

1 个答案:

答案 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,这在大型数据集上会很慢。