I probably don't understand how the "In" extension method in RavenDb works. I thought this was the equivalent of the IN command in the SQL world, for example. WHERE THEM (1, 2, 3). But it behaves rather strangely.
// i have 3 records - two with Normal severity, one with Low severity using (var session = store.OpenSession()) { session.Store(new TestObject { Name = "o1", Severity = Severity.Normal }); session.Store(new TestObject { Name = "o2", Severity = Severity.Low }); session.Store(new TestObject { Name = "o3", Severity = Severity.Normal }); session.SaveChanges(); } // this writes the Low severity record, it seems correct using (var session = store.OpenSession()) { var data = session.Query<TestObject>() .Where(o => o.Severity.In(new[] { Severity.Low })) .OrderBy(o => o.Name).ToList(); data.ForEach(r => Console.WriteLine(r)); } // this writes also the Low severity record, it still seems correct using (var session = store.OpenSession()) { var data = session.Query<TestObject>() .Where(o => o.Severity.In(new[] { Severity.Low, Severity.High })) .OrderBy(o => o.Name).ToList(); data.ForEach(r => Console.WriteLine(r)); } // this writes all records, still seems correct using (var session = store.OpenSession()) { var data = session.Query<TestObject>() .Where(o => o.Severity.In( new[] { Severity.High, Severity.Low, Severity.Normal })) .OrderBy(o => o.Name).ToList(); data.ForEach(r => Console.WriteLine(r)); } // but this does not write anything // despite there are 2 records with Normal severity using (var session = store.OpenSession()) { var data = session.Query<TestObject>() .Where(o => o.Severity.In(new[] { Severity.High, Severity.Normal })) .OrderBy(o => o.Name).ToList(); data.ForEach(r => Console.WriteLine(r)); } // and this does not write anything either, // I just tried whether the order of values in the array matters using (var session = store.OpenSession()) { var data = session.Query<TestObject>() .Where(o => o.Severity.In(new[] { Severity.Normal, Severity.High })) .OrderBy(o => o.Name).ToList(); data.ForEach(r => Console.WriteLine(r)); }
Or did I find a bug in the RavenDb / Lucene engine?
Edit
I found another weird thing. He must do something with the alphabetical order of the members of the enumeration. When I rename Severity.Normal to Severity.A, the last two queries behave correctly and return results. When I rename Severity.Normal to Severity.La, it still works (because La <Low). But when I rename Severity.Normal to Severity.Lu (Lu> Low), it breaks and the last two queries no longer return results. The original sample does not work because Normal> Low. But I still wonder why this is happening, because for me it does not make sense.
Tomáš Herceg
source share