Lucene. Чистый не может разобрать вопрос, используя RavenDB ' IN' оператор в списке пустых строк

Я мигрировал к RavenDB 2.0, и пишу вопрос, используя В оператор, который производит ошибку, разбирая вопрос.

Я использую EmbeddableDocumentStore , чтобы изолировать проблему в тестах единицы. Я в настоящее время бегу, RavenDB Включил 2.0.2230. Я попытался запустить те же самые тесты против 1.2.2033-нестабильного RavenDB.Embedded, и ни о какой ошибке не сообщают.

Подвергаемый сомнению объект прямой:

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()
                where c.Country.In(list)
                select c;

    var companies = query.ToList();
}

Вопрос собирает, но я получаю следующую ошибку, когда вопрос разобран во времени выполнения:

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

Поскольку вы видите, что последний пункт в коллекции был разобран по-другому к предыдущим пунктам. Это - то, что, кажется, вызывает проблему.

Какие-либо идеи?

2
nl ja de
Почему вы заботитесь о пустых строках? Кто вы после?
добавлено автор Matt Johnson, источник
Вопрос - просто linq заявление, уже показанное...? Какие ценности вы имеете в виду?
добавлено автор Nick, источник
Если вместо этого вы имеете в виду где список. Содержит (c. Страна) тогда, нет. Это собирает, но не разберет как вопрос Lucene: "Метод, не поддержанный: Содержит"
добавлено автор Nick, источник
Я добираюсь, подобная ошибка к Содержит подход, пробуя тот путь: Тип выражения, не поддержанный: Система. Linq. Выражения. TypedParameterExpression. Я попробовал его и в нестабильной версии с июля и в последней стабильной версии.
добавлено автор Nick, источник
Случай края я предполагаю. По крайней мере его нежелательное поведение.
добавлено автор Nick, источник
Как вы строите свой динамический вопрос? Каковы те ценности?
добавлено автор VoidMain, источник
I' m жаль, missreaded ваш вопрос, что-то вроде этого работает?: , где c. Страна. Любой (c => список. Содержит (c))
добавлено автор VoidMain, источник
Я проверил (на очень простой установке): , где список. Любой (l => l == c. Страна) и это, кажется, делает правильную вещь.
добавлено автор VoidMain, источник

1 ответы

Это, кажется, ошибка в RavenDB. Есть две ошибки на самом деле, один касающийся исключения перевода, которое вы получаете, когда больше чем одна пустая строка находится в списке и другом, который даже с единственной пустой строкой, .In() не восстанавливает пункт с пустой строкой.

Raven indexes empty strings as [[EMPTY_STRING]] instead of "" because Lucene would not pick up on it. It works with .Where(x == ""), but it doesn't appear to work with .Where(x.In(new[]{""}))

Я представлю проблему их шпиону ошибки. Спасибо.

UPDATE This has been fixed as of RavenDB 2.0.2236-Unstable

2
добавлено
issues.hibernatingrhinos.com/issue/RavenDB-814
добавлено автор Matt Johnson, источник
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot