Не удалось:
var results = container.Query<SomeClass>(s =>
s.Field == value && s.AnEnumField != SomeEnum.AnEnumValue
);
Assert.AreEqual(1, results.Count);
Но это не так:
Predicate<SomeClass> matches = s =>
s.Field == value && s.AnEnumField != SomeEnum.AnEnumValue;
var results = container.Query<SomeClass>(s => matches(s));
Assert.AreEqual(1, results.Count);
Различия в тестах ясно демонстрируют, что проблема возникает только тогда, когда db4o выполняет преобразование выражения, поскольку вызов метода предотвращает это. Значение, проверенное в тесте, является точным значением (без различий в регистре), поскольку тест вставляет его первым.
Какие-нибудь особые условия, когда преобразования db4o содержат ошибки в этих запросах? может быть с .net enums?
Я сузил это, и мой пример выше не включал неприятную часть. Не относится к полю enum, но к значению в приведенном выше выражении.
В частности, проблема возникает, когда запрос включает в себя значение someInstance.Field, например:
var results =
container.Query<SomeClass>(s =>
s.Field == someInstance.Field && s.AnEnumField != SomeEnum.AnEnumValue
);
Assert.AreEqual(1, results.Count);