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.