2009-05-18 3 views
1

bauen Ich versuche, eine Abfrage erstellen für eine Suchmaschine zu verwenden, das wie dieses aussehen:Wie kann ich einen Komplex, wo Klausel in Subsonic 2.0

SELECT * FROM sometable 
WHERE col1 = 1 
AND col2 = 2 
AND (col3a = 3 OR col3b = 3 OR col3c = 3) 

ich unten, obwohl der Code funktionieren würde, :

SubSonic.Query query = new SubSonic.Query("sometable"); 
query = query.WHERE("col1", 1); 
query = query.WHERE("col2", 2); 
query = query.AND("col3a = " + 3). 
    OR("col3b = " + 3). 
    OR("col3c = " + 3); 

aber es funktioniert nicht, wie es in etwa wie folgt ergibt:

SELECT * FROM sometable 
WHERE col1 = 1 
AND col2 = 2 
AND col3a = 3 
OR col3b = 3 
OR col3c = 3 

: wie kann ich eine Abfrage, die ich brauche?

+1

Es lohnt sich wahrscheinlich, diese Frage mit der Sprache, die Sie verwenden, und der Art der Suchmaschine, die Sie abfragen möchten, zu kennzeichnen. Es sieht aus wie Sie SQL verwenden. Das könnte ein nützliches Tag sein. –

Antwort

1

Sie zwei eine Abfrage erstellen können zunächst, dass alle oder die danach von der Include resultierende view..you herauszufiltern und condition..I dint überprüfen kann es out..but es funktioniert hoffentlich ...

+0

Können Sie einen Beispielcode bereitstellen? –

+0

Ich weiß nicht, SubSonic ... So kann ich Ihnen kein Beispiel geben ... ich schlug mit dem Wissen von SQL ... – sona

+0

Probieren Sie diese deklarieren Sie @temp (Spaltennamen, die Sie hier angeben) Einfügen in @temp (Spaltennamen) (select * from Table1 wo col3a = 3 OR col3b = 3 OR col3c = 3) select * from @temp where col1 = 1 und col2 = 2 Nicht wissen, ob Temperatur in SubSonic arbeiten oder not..just versuchen – sona

1

Ich kenne SubSonic nicht, aber würde das funktionieren?

Abfrage = Abfrage.AND ("col3a =" + 3 + "ODER col3b =" + 3 + "ODER col3c =" + 3);

Sie könnten diese Teilzeichenfolge programmatisch einfach erstellen.

+0

Nein, es funktioniert nicht –

2

Ich denke, dass Sie WhereExpression/AndExpression/OrExpression verwenden sollen, um Ausdrücke zu verschachteln, die die Dokumentation lesen, aber ich habe es nie verwendet, so kann ich nicht sicher sagen. Versuchen Sie, die unten und sehen, ob es

SubSonic.Query query = new SubSonic.Query("sometable"); 
query = query.WHEREEXPRESSION("col1", 1); 
query = query.AND("col2 = " + 2); 
query = query.ANDEXPRESSION("col3a = " + 3). 
    OR("col3b = " + 3). 
    OR("col3c = " + 3); 
+0

Danke, die Version, die ich verwende (v2.0.50727) hat keine WHEREEXPRESSION oder ANDEXPRESSION und ich kann die neue Version nicht für jetzt verwenden. –

+0

Es gab auch eine OpenExpression und CloseExpression-Methoden erwähnt, aber konnte keine Beispiele für die Verwendung finden, also nehme ich nur an, sie tun, was durch den Namen impliziert wird. Wären diese für Sie verfügbar? – Trotts

+0

Leider nicht –

3

folgende Arbeiten sollte ziemlich nah an, was Sie wollen, wenn OpenExpression/CloseExpression in 2.0 unterstützt:

SubSonic.Query query = new SubSonic.Query("sometable"); 
    .WHERE("col1", 1); 
    .AND("col2", 2); 
    .AND("col3a = " + 3). 
    .OpenExpression() 
    .OR("col3b = " + 3). 
    .OR("col3c = " + 3); 
    .CloseExpression() 
+0

nicht unterstützt :( –

+0

In diesem Fall, wenn die Aktualisierung wirklich keine Option ist, dann sind Sie wahrscheinlich am besten, entweder eine Inline-Abfrage oder eine Ansicht zu verwenden. –

0

Ich sehe es wie ich nicht so einfach erwartet, zumindest nicht in der Version, die ich habe, also entschied ich mich, das DataSet manuell zu durchlaufen, um die Datensätze von der letzten Prüfung herauszufiltern. Es sei denn, es gibt einen besseren Weg?

0

Ich würde Ihnen empfehlen, auf SubSonic 2.2 zu aktualisieren ... Die neuen Abfragefunktionen in 2.1 hinzugefügt sind viel mächtiger.