2

我已迁移到 RavenDB 2.0 并正在使用IN解析查询时产生错误的运算符编写查询。

我正在使用 anEmbeddableDocumentStore来隔离单元测试中的问题。我目前正在运行 RavenDB Embedded 2.0.2230。我已经尝试对 RavenDB.Embedded 1.2.2033-Unstable 运行相同的测试,并且没有报告错误。

被查询的对象是直截了当的:

public class Company
{
    public string Name { get; set; }
    public string Country { get; set; }
}

我的设置和查询如下:

var documentStore = new EmbeddableDocumentStore { RunInMemory = true };
documentStore.Initialize();

using (var session = documentStore.OpenSession())
{
    var list = new[] { "", "", "" };

    var query = from c in session.Query<Company>()
                where c.Country.In(list)
                select c;

    var companies = query.ToList();
}

查询编译,但在运行时解析查询时收到以下错误:

Lucene.Net.QueryParsers.ParseException :
Could not parse modified query:
'@in<Country>:("EMPTY_STRING","EMPTY_STRING",[[EMPTY_STRING]]) '
original was:
'@in<Country>:([[EMPTY_STRING]],[[EMPTY_STRING]],[[EMPTY_STRING]]) '

如您所见,集合中的最后一项与前面的项的解析方式不同。这似乎是导致问题的原因。

有任何想法吗?

4

1 回答 1

2

这似乎是 RavenDB 中的一个错误。实际上有两个错误,一个与您在列表中有多个空字符串时遇到的翻译异常有关,另一个即使只有一个空字符串,.In()也不会检索带有空字符串的项目。

Raven 索引空字符串,[[EMPTY_STRING]]而不是""因为 Lucene 不会接受它。它适用于.Where(x == ""),但似乎不适用于.Where(x.In(new[]{""}))

我将向他们的错误跟踪器提交问题。谢谢。

更新 这已从 RavenDB 2.0.2236-Unstable 开始修复

于 2013-01-09T17:22:26.743 回答