2014-02-17 3 views
8

Ich versuche, eine Slick-Abfrage mit einem negierten inSet zu konstruieren, aber ich habe Probleme, die richtige Syntax herauszufinden. Ich möchte etwas tun, wieWie kann ich "inSet" in einer Scala Slick-Abfrage negieren?

val lst = List(1, 2, 3) 
Query(Table1).where(_.id1 === 1).where(!(_.id2 inSet lst)).list 

oder

Query(Table1).where(_.id1 === 1).where(isNot(_.id2 inSet lst)).list 

von denen keine Musterung geht. Ist es möglich, eine inSet so zu negieren, und wenn ja, was ist die korrekte Syntax? Oder gibt es eine andere Möglichkeit, die Abfrage zu erstellen, die den negierten inSet nicht erfordert? Ich benutze Slick 1.0.1, ich erwarte, dass wir im nächsten Monat auf Slick 2.0 upgraden werden. (Ich kann eine filterNot(lst.contains(_.id2)) auf die Abfrageergebnisse anwenden, anstatt eine negiert inSet innerhalb der Abfrage des Setzens, aber dies würde erschweren die Funktion Ich schreibe und so würde ich eher ein negiert inSet wenn möglich verwenden.)

Antwort

10

One von

Query(Table1).filter(_.id1 === 1).filter(row => !(row.id2 inSet lst)).list

Query(Table1).filter(_.id1 === 1).filterNot(_.id2 inSet lst).list

Verwandte:https://github.com/slick/slick/pull/204

Anmerkungen zur Seite:where ist veraltet. Verwenden Sie die Scala Collections-Terminologie anstelle der SQL-Terminologie. Sie sind auch in der falschen Annahme, dass in Scala !(_.id2 inSet lst) auf x => !(x.id2 inSet lst) erweitert, wenn es tatsächlich zu !(x => x.id2 inSet lst) erweitert, was nicht viel Sinn macht.