1

orを使用して、(多くのフィールドを検索している検索ボックス)を使用して、自動クエリのいくつかのフィールドを変更しようとしています。これはドキュメントによれば、うまくいかないようです。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;} 
    } 

は、デフォルトのクエリによって

はフィルタのように行動し、すべての条件がさらにresult-をフィルタリングすると とブール用語を組み合わせた照会動作の変更しますセット。

[QueryDbField(TERM = QueryTerm.Or)] 公共ストリング氏名{得る;これは TERM = QueryTerm.Or改質剤、例えばを指定することにより、フィールドレベルでORを使用するように変更することができますセット; }

どのようにフィールドレベルまたはクエリを行うことができますか?

+0

"フィールドレベルまたはクエリ"とはどういう意味ですか?最初のクエリは、WHERE文のフィルタである必要があります。どのようなSQLを生成したいですか? – mythz

+0

私は、に基づいてフィルタリングしようとしていました。私の場合は、名前が含まれているか、都市に含まれています。 'と'の条件を持つ他のフィールドがあります。私は、と条件を差し込む前に、最初のケースが動作することを期待していました。 – lucuma

+0

これはすべて剣道グリッドに関係しています。列はフィルタリング可能(AND)であり、グリッドの上に同じ自動問合せでOR条件のセットを生成する検索ボックスがあります。 – lucuma

答えて

1

問題は、「%は含まれて」のようなimplicit conventionに依存している[QueryDbField]を使用している:あなたは暗黙の規則をオーバーライドします[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"、Template = "{Field} LIKE {Value}"、ValueFormat = "%{0}%" Term :: QueryTerm.Or)] '' QueryTerm.Or'を追加するだけではうまくいきません – lucuma

+0

@lucumaあなたは動作をContainsに変更することを意味します。もしあなたが独自の '[QueryDbField]'を提供しているなら、振る舞いを引き継ぎ、デフォルトの '= '振る舞いから振る舞う必要があります。暗黙的な慣習的な振る舞いを維持するのが簡単かどうかを見ていきます。 – mythz

+0

私のポストの最初の例は使えますか? – lucuma

関連する問題