微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – RavenDb“In”运算符如何工作?

我可能不明白Ravendb中的“In”扩展方法是如何工作的.我认为它相当于sql世界中的IN命令,例如数字IN(1,2,3).但它表现得很奇怪.
// 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));
}

或者我在Ravendb / Lucene引擎中发现了一个错误

编辑

我发现了另一件奇怪的事.它必须按照枚举成员的字母顺序执行某些操作.当我将Severity.normal重命名为Severity.A时,最后两个查询的行为正确并返回结果.
当我将Severity.normal重命名为Severity.La时,它仍然有效(因为La< Low).但是当我将Severity.normal重命名为Severity.Lu(Lu> Low)时,它会中断并且最后两个查询不再返回结果.原始样本不起作用,因为正常>低.但我仍然想知道为什么会这样,因为它对我没有意义.

解决方法

你正在遇到陈旧的索引,这就是你得到奇怪结果的原因. 您需要等待索引首先完成.

原文地址:https://www.jb51.cc/csharp/101001.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐