2010-06-17 3 views
3

를 확인하는 방법 - 간단한 쿼리 :db4o는 LINQ 쿼리 - 널 (null) 문자열 안녕

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, 또는 뭔가?

건배, 데이브

답변

3

실제로 쿼리는 문제없이 작동합니다. 쿼리가 제대로 실행되어야합니다. 또한 활성화가 필요하지 않습니다. db4o는 translate the queries into SODA-Queries을 시도하여 개체를 활성화하지 않습니다.

사용중인 db4o 버전은 무엇입니까? a bug which이 LINQ-Queries에서 NullRefrence-Exception을 일으켰습니다. 그것은 고쳐 져야한다.

Db4objects.Db4o.Linq.dll 어셈블리를 프로젝트에 추가 했습니까? 모노 어셈블리가 있습니까?

내가 쿼리 최적화를 방지하기 때문에 나는 String.IsNullOrEmpty를 사용하지 않도록 노력했다. 쿼리를 사용하여 복잡한 메소드를 호출하자마자 옵티마이 저는 쿼리를 SODA로 변환 할 수 없습니다. 그런 다음 LINQ to Objects를 실행하면 큰 데이터 집합에서 느려집니다.

+0

안녕하세요 - 답장을 보내 주셔서 감사합니다.이 Db4o 자료에 상당히 도움이됩니다. 고맙습니다. 방금 ​​모든 DLL을 최신 릴리스로 업그레이드 했으므로 이제 쿼리가 실행됩니다. 그러나 더 이상 내 인덱스가 작동하지 않습니다. * 한숨 * 콘솔에 로깅을 사용하도록 설정했는데 이전 색인에 나와있는 것처럼 색인을 잃어버린 것에 대한 메시지가 표시되지 않습니다. 아이디어가 있으십니까? :( 건배, 데이브 –

+0

흠 그 이상입니다. 당신은 비주얼 스튜디오의 출력 창에 새로운 'Db4objects.Db4o.Linq.QueryOptimizationException'을 볼 수 있습니까? 즉 해당 쿼리가 더 이상 최적화되어 있지 않습니다 나타냅니다. 8.0 베타 버전으로 전환 한 경우 'Db4objects.Db4o.Linq.dll'어셈블리에 'Mono.Reflection.dll'이 있는지 확인하십시오. 이것은 Cecil 어셈블리 대신 새로운 종속성입니다. 어쨌든 – Gamlor

+0

나는 최신 v7 Dll을 사용하고 있었으며 베타 버전으로 업그레이드 했으므로 이제 모든 것이 정상적으로 보입니다. 다시 도움을 요청합니다. Dave –