我已迁移到RavenDB 2.0并使用IN
运算符编写查询,该运算符在解析查询时产生错误。
我使用EmbeddableDocumentStore
来隔离单元测试中的问题。我目前正在运行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]]) '
正如您所看到的,集合中的最后一项已经与前面的项目进行了不同的解析。这似乎是导致问题的原因。
有什么想法吗?
答案 0 :(得分:2)
这似乎是RavenDB中的一个错误。实际上有两个错误,一个与您在列表中有多个空字符串时获得的转换异常有关,另一个与即使只有一个空字符串有关,.In()
也没有检索到该项目空字符串。
Raven将空字符串索引为[[EMPTY_STRING]]
而不是""
,因为Lucene不会接收它。它适用于.Where(x == "")
,但它似乎不适用于.Where(x.In(new[]{""}))
我会向他们的错误跟踪器提交一个问题。感谢。
<强>更新强> 从RavenDB 2.0.2236-Unstable
开始修复