DB4o Linq запрос - Как проверить наличие нулевых строк - PullRequest
3 голосов
/ 17 июня 2010

Привет - простой запрос:

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 или что-то еще?

Cheers, Dave

1 Ответ

3 голосов
/ 17 июня 2010

На самом деле ваш запрос должен работать без проблем. Ваш запрос должен просто работать нормально. Это также не должно требовать никакой активации. db4o пытается преобразовать запросы в SODA-Queries и избежать активации объектов.

Какую версию db4o вы используете? Была ошибка, которая вызвала исключение NullRefrence в LINQ-Queries. Это должно быть исправлено.

Добавили ли вы сборку Db4objects.Db4o.Linq.dll в ваш проект. Присутствуют ли моносборки?

В данный момент я бы попытался избежать использования String.IsNullOrEmpty, потому что я буду препятствовать оптимизации запросов. Как только вы вызовете сложные методы с вашим запросом, оптимизатор не сможет перевести запрос в SODA. Затем вы в основном запускаете LINQ to Objects, что будет медленно на большом наборе данных.

...