2

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]]) '

ご覧のとおり、コレクションの最後のアイテムは、前のアイテムとは異なる方法で解析されています。これが問題の原因と思われるものです。

何か案は?

4

1 に答える 1

2

これは RavenDB のバグのようです。実際には 2 つのバグがあります。1 つは、リストに複数の空の文字列がある場合に発生する翻訳例外に関連するもので、もう 1 つは、空の文字列が 1 つであっても、空の文字.In()列を含むアイテムを取得しないものです。

[[EMPTY_STRING]]Raven は、代わりに""、Lucene がそれを取得しないため、空の文字列にインデックスを付けます。で動作します.Where(x == "")が、動作していないようです.Where(x.In(new[]{""}))

バグトラッカーに問題を提出します。ありがとう。

更新 これは RavenDB 2.0.2236 で修正されました-不安定です

于 2013-01-09T17:22:26.743 に答える