ServiceStack AutoQuery и поле Term Or

Я пытаюсь изменить несколько полей в автозапросе для запроса с помощью или (это окно поиска, которое ищет во многих полях). Это не похоже на работу, хотя согласно документации это должно.

public class PropertyGet : QueryDb<DomainModel.Property>
{
    [QueryDbField(Term=QueryTerm.Or)]
    public string NameContains { get; set; }

    [QueryDbField(Term=QueryTerm.Or)]
    public string CityContains {get;set;}
}

Однако это делает:

[QueryDb(QueryTerm.Or)]
 public class PropertyGet : QueryDb<DomainModel.Property>
    {
        public string NameContains { get; set; }
        public string CityContains {get;set;}
    }

Изменение запрашивающего поведения

По умолчанию запросы действуют как фильтры, и каждое условие объединяется с логическим термином AND для дальнейшей фильтрации набора результатов. Это можно изменить, чтобы использовать ИЛИ на уровне поля, указав модификатор Term=QueryTerm.Or, например:

[QueryDbField (Term=QueryTerm.Or)] публичная строка LastName { get; задавать; }

Как я могу сделать уровень поля или запрос?

1 ответ

Решение

Проблема связана с использованием [QueryDbField] который опирается на неявное соглашение типа "% содержит":

public class PropertyGet : QueryDb<DomainModel.Property>
{
    [QueryDbField(Term=QueryTerm.Or)]
    public string NameContains { get; set; }

    [QueryDbField(Term=QueryTerm.Or)]
    public string CityContains {get;set;}
}

Где при использовании [QueryDbField] Вы бы переопределили неявное соглашение. Я изменил поведение в этом коммите, где он теперь объединяет поведение обоих [QueryDbField] и соответствующее неявное соглашение, так что ваш запрос должен теперь работать как положено.

Это изменение доступно с v4.5.7+, которое теперь доступно на MyGet.

Другие вопросы по тегам