1

또는 (여러 필드를 검색하는 검색 상자)를 사용하여 쿼리를 위해 자동 검색에서 몇 가지 필드를 변경하려고합니다. 이것은 문서에 따르면 작동하지 않는 것 같습니다.ServiceStack AutoQuery 및 필드 용어 또는

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;} 
    } 

는 기본 쿼리으로

는 필터처럼 행동하고 모든 조건이 더에서 그 결과를 필터링 할 수와 및 부울 용어를 결합 쿼리 동작 변경 세트. 이것은 가 기간 = QueryTerm.Or 개질제, 예컨대 지정하여 필드 레벨에서의 OR를 사용하도록 변경 될 수

[QueryDbField (기간 = QueryTerm.Or)] 공개 문자열 성 {얻는다; 세트; }

어떻게 필드 수준 또는 쿼리를 수행 할 수 있습니까?

+0

"필드 수준 또는 쿼리"란 무엇을 의미합니까? 첫 번째 쿼리는 WHERE 문에서 필터 여야합니다. 생성하고자하는 SQL은 무엇입니까? – mythz

+0

나는 단지를 기반으로하거나 또는 대신에 필터링하려고했습니다. 내 경우에는 Name이 포함하거나 City가 포함합니다. '및'조건을 가질 다른 필드가있을 것입니다. 나는 조건을 연결하기 전에 첫 번째 사례가 작동 할 것으로 기대하고있었습니다. – lucuma

+0

이것은 검도 그리드와 관련이 있습니다. 열은 필터링 가능하며 (AND), 같은 자동 검색에서 OR 조건 집합을 생성하고자하는 표 위에 검색 상자가 있습니다. – lucuma

답변

1

문제로 인해 "%가 포함되어 있습니다"와 같은 implicit convention에 의존하는 [QueryDbField]을 사용하는 것입니다 : 당신이 암시 적 규칙을 오버라이드 (override) 할 [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;} 
} 

. this commit의 동작을 변경 했으므로 [QueryDbField]과 일치하는 암시 적 규칙을 모두 병합하므로 쿼리가 예상대로 작동해야합니다.

이 변경은 v4.5.7 +에서 사용 가능하며 현재는 available on MyGet입니다.

+0

이 작업을 수행 할 수있는 유일한 방법은 전체 db 필드 정의 ['QueryDbField (Field = "Name", 템플릿 = "{Field} LIKE {Value}", ValueFormat = "% {0} %" Term = QueryTerm.Or)]'QueryTerm.Or을 추가하는 것만으로는 작동하지 않습니다 – lucuma

+0

@lucuma 오라클은 행동을 Contains로 바꾸는 것을 의미합니다. 네가 자신의'QueryDbField ' 행동을 다시 받아 들여 기본'='행동에서 그것을 바꿀 필요가있다. 내재적 인 관습 적 행동을 유지하기가 쉬운 지 알 수 있습니다. – mythz

+0

내 게시물의 첫 번째 예제가 작동해야합니까? – lucuma