为什么RavenDB返回错误的总结果数?

时间:2015-02-20 12:25:27

标签: ravendb

如下面的单元测试所示,我希望 stats.TotalResults 为2但是为什么?

    [Test]
    public void RavenQueryStatisticsTotalResultsTest1()
    {
        using (var db = _documentStore.OpenSession())
        {
            db.Store(new Club { Name = "Foo1", Type = "Amateur" }); // --> Matches all conditions
            db.Store(new Club { Name = "Foo2", Type = "Professional" });
            db.Store(new Club { Name = "Foo3", Type = "Amateur" }); // --> Matches all conditions
            db.Store(new Club { Name = "Boo1", Type = "Amateur" });
            db.Store(new Club { Name = "Boo2", Type = "Professional" });
            db.SaveChanges();
        }

        WaitForIndexing(_documentStore);

        using (var db = _documentStore.OpenSession())
        {
            RavenQueryStatistics stats;
            var query = db.Query<Club>()
                    .Statistics(out stats)
                    .Where(club => club.Type == "Amateur")
                    .Intersect()
                    .Search(club => club.Name, "Foo*", escapeQueryOptions: EscapeQueryOptions.AllowPostfixWildcard); 

            var clubs = query.ToList();

            Assert.AreEqual(2, clubs.Count);
            Assert.AreEqual(2, stats.TotalResults); // I expect 2 but was 3! Why is that?
        }
    }

1 个答案:

答案 0 :(得分:4)

使用多个where子句时需要Intersect。要合并WhereSearch,您必须将SearchOptions.And传递给Search

using (var db = _documentStore.OpenSession()) {
    RavenQueryStatistics stats;
    var query = db.Query<Club>()
        .Customize(_ => _.WaitForNonStaleResultsAsOfLastWrite())
            .Statistics(out stats)
            .Where(club => club.Type == "Amateur")
            .Search(
                club => club.Name,
                "Foo*", 
                escapeQueryOptions: EscapeQueryOptions.AllowPostfixWildcard, 
                options:SearchOptions.And);

    var clubs = query.ToList();

    Assert.AreEqual(2, clubs.Count);
    Assert.AreEqual(2, stats.TotalResults); 
}