1

Ich versuche, ein paar Felder auf eine Autoquery zu ändern, Abfrage mit oder (es ist ein Suchfeld, das viele Felder sucht). Dies scheint nicht zu funktionieren, obwohl es laut der Dokumentation sollte.ServiceStack AutoQuery und Field Term Oder

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

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

aber dies tut:

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

Abfrage Verhalten ändern

von Standardabfragen wirken wie ein Filter und jede Bedingung kombiniert wird mit AND boolean Begriff, um die result- zu filtern einstellen. Dies kann geändert werden, um einen oder am Feldebene zu verwenden, indem Begriff = QueryTerm.Or Modifikator spezifiziert, z:

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

Wie kann ich eine Feldebene oder Abfrage durchführen?

+0

Was meinen Sie mit "Feldebene oder Abfrage"? Die erste Abfrage muss ein Filter in einer WHERE-Anweisung sein. Welche SQL möchten Sie generieren? – mythz

+0

Ich habe nur versucht, basierend auf oder anstelle von und zu filtern. In meinem Fall, wenn Name enthält oder Stadt enthält. Es wird andere Felder geben, die "und" Bedingungen haben. Ich hatte erwartet, dass der erste Fall funktionieren würde, bevor ich die Bedingungen eintrug. – lucuma

+0

Dies ist alles in Bezug auf ein Kendo-Gitter. Die Spalten sind filterbar (AND) und es gibt ein Suchfeld oberhalb des Rasters, das eine Reihe von OR-Bedingungen für dieselbe automatische Abfrage erzeugen soll. – lucuma

Antwort

1

Das Problem ist, aufgrund eines [QueryDbField] verwenden, wie „% Enthält“ auf einem implicit convention beruht:

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

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

Wo, wenn [QueryDbField] verwenden Sie die implizite Konvention außer Kraft setzen würde. Ich habe das Verhalten in this commit geändert, wo es jetzt das Verhalten von [QueryDbField] und der übereinstimmenden impliziten Konvention zusammenführt, so dass Ihre Abfrage nun wie erwartet funktionieren sollte.

Diese Änderung ist ab v4.5.7 + jetzt available on MyGet verfügbar.

+0

Die einzige Möglichkeit, dies zum Laufen zu bringen, war die Angabe der gesamten Datenbankfelddefinition '[QueryDbField (Field =" Name ", Template =" {Feld} LIKE {Value} ", ValueFormat ="% {0}% ", Term = QueryTerm.Or)] 'Nur das Hinzufügen der' QueryTerm.Or' funktioniert nicht für mich – lucuma

+0

@lucuma oh du meinst für das Ändern des Verhaltens zu Enthält, yeah, wenn Sie Ihre eigenen liefern [QueryDbField] 'Sie ' Sie übernehmen das Verhalten und müssen es von ihrem Standard '=' Verhalten ändern. Ich werde sehen, ob es leicht ist, das implizite Konventionsverhalten beizubehalten. – mythz

+0

Sollte das erste Beispiel in meinem Beitrag funktionieren? – lucuma