3

ちょっとそこに-簡単なクエリ:

var q = (from SomeObject o in container
    where 
 o.SomeInt > 8 
 && o.SomeString != null //Null Ref here
    select o;

私は常にnull参照例外を受け取ります。

String.IsNullOrEmpty(o.SomeString)を使用すると、&& o.SomeString!= ""を使用した場合と同じように、クエリに約100倍の時間がかかります(これははるかに高速ですが、明らかに正しくありません)。

DB4oはオブジェクトをIsNullOrEmpty呼び出しに渡すためにオブジェクトをアクティブ化する必要があり、インデックスを使用できないためだと思います。

私の質問は、この状況でnullをチェックするためのより良い方法は何ですか?mystring!= Db4o.DBNull.Valueのようなものはありますか?

乾杯、デイブ

4

1 に答える 1

3

実際、クエリは問題なく機能するはずです。クエリは正常に実行されるはずです。また、アクティベーションは必要ありません。db4oは、クエリをSODAクエリに変換し、オブジェクトのアクティブ化を回避しようとします。

どのバージョンのdb4oを使用していますか?LINQクエリでNullRefrence-Exceptionを引き起こすバグがありました。修正する必要があります。

Db4objects.Db4o.Linq.dllアセンブリをプロジェクトに追加しましたか。モノアセンブリは存在しますか?

クエリの最適化を妨げるため、現時点ではString.IsNullOrEmptyの使用を避けようとしました。クエリを使用して複雑なメソッドを呼び出すとすぐに、オプティマイザはクエリをSODAに変換できなくなります。次に、基本的にLINQ to Objectsを実行しますが、これは大きなデータセットでは遅くなります。

于 2010-06-17T12:29:50.857 に答える