これは失敗します:
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列挙型で?
私はそれを絞り込みました、そして上記の私の例は厄介なビットを含んでいませんでした。enumフィールドとは関係ありませんが、上記の式の「value」と関係があります。
具体的には、クエリに次のような値のsomeInstance.Fieldが含まれている場合に問題が発生します。
var results =
container.Query<SomeClass>(s =>
s.Field == someInstance.Field && s.AnEnumField != SomeEnum.AnEnumValue
);
Assert.AreEqual(1, results.Count);