2017-05-10 1 views
0

Ich habe ein Feld ergibt, das ist, alsRavenDB: .In() und .Where() unterschiedliche Ergebnisse

indexiert
Index(x => x.Status, FieldIndexing.Default); 

in einer Sammlung mit insgesamt 2566 Datensätzen.

Nun, wenn ich so abfragen:

var query = _ravenSession 
    .Query<MyIndex.ReduceResult, MyIndex>() 
    .Statistics(out stats); 

query = query.Where(x => x.Status != "inactive" && x.Status != "invalid" && x.Status != "sold"); 

ich ein Gesamtergebnis Zahl von 2512.

bekommen, aber wenn ich so abfragen:

query = query.Where(x => !x.Status.In("inactive", "invalid", "sold")); 

ich ein Gesamtergebnis erhalten Zählung von 2520. Wie kann diese Zählung anders sein?

ich sehen kann, dass die erste Abfrage

übersetzt {((((-Status: inaktiv und Status: *) UND -Status: ungültig)) UND -Status: verkauft)}

und die zweite:

{(: uND - @ in` < der Status >: (inaktiv, ungültig, verkauft))}

Antwort

2

Es gibt einen Unterschied mit, wie diese Abfrage verarbeitet wird. Im ersten Fall erlauben Sie nur Ergebnisse, die eine Status haben, in der zweiten sagen Sie alles außer diesen bestimmten Werten. Wenn Sie also Werte haben, die nicht über die Eigenschaft status verfügen, könnte dies die Ursache sein.

+0

Danke. Aus Sicht von C# sollten diese beiden Ausdrücke identisch sein. Und ich bin nicht so tief in Lucene-Syntax, die mich abwarf. Wenn ich Sie richtig verstehe, enthält die erste Abfrage (wenn sie verarbeitet wird) implizit eine Nullprüfung. Und ich hatte wirklich Null-Werte auf dem Feld für ein paar Datensätze –

Verwandte Themen