2016-08-15 3 views
1

Ich versuche, die SQL-Abfrage zu erzeugen, die etwa wie folgt aussieht:Mit Ormlite zu Gruppenabfragebedingungen

SELECT * FROM Contact Where UserId = @UserId AND (FirstName = 'John' OR Surname = 'Smith') 

Dies ist, was ich tun kann:

Db.From<Contact>().Where(c => c.UserId == userId) 
.And("(FirstName = {0} OR Surname = {1})"), firstName, surname); 

Betrachtet man auch, dass der Nachname Bedingung ist optional, dh mit einer Raw-Zeichenfolge können wir die Zeichenfolge erstellen. Gibt es eine Möglichkeit, eine rohe SQL-Zeichenfolge nicht verwenden zu müssen?

Mögliche Lösung:

var q = Db.From<Contact>().Where(c => c.UserId == userId); 
if (onlyFirstName) { 
    q.And(c => c.FirstName == firstName); 
} else if (onlySurname) { 
    q.And(c => c.Surname == surname); 
} else { 
    q.And(c => c.FirstName == firstName || c.Surname = surname); 
} 

Kennt jemand eine bessere Lösung?

Antwort

1
var ev = Db.From<Contact>().Where(c => c.UserId == userId); 
if (someCase) 
    ev.And(c => c.FirstName == firstName || c.Surname == surname); 

oder wenn keine someCase

var ev = Db.From<Contact>().Where(c => c.UserId == userId && (c.FirstName == firstName || c.Surname == surname)); 
+0

Ah ja (außer Sie sollte OR sein ||). Ich habe vergessen zu erwähnen, dass ich eine zweite Bedingung in dem gruppierten AND machen muss, um optional zu sein. Daher möchte ich in einigen Fällen nicht nach Nachnamen filtern. Und ich denke, ich habe mein Beispiel vereinfacht, weil meine eigentliche Abfrage die Verwendung einer Volltextsuche erfordert. – vonec

+0

Sorry behoben es. Ist es jetzt besser? – labilbe

+0

Besser, aber einige Fälle fehlen, die ich jetzt in der OP aufgenommen habe. Ich warte nur darauf, ob jemand anderes eine bessere Lösung hat. – vonec