2015-06-12 17 views
6

Slick-3'teki sayıların listesini filtrelemek için bir koşulla karşılaştım. İşte benim varlığım. İşteSlick 3'teki sayıların listesi için süzgeç 3

case class Company(id:Long, name: String, companyTypeId: Option[List[Long]] = None) 

    implicit def GetResultCompany(implicit e0: GR[Long], e1: GR[String], e2: GR[Option[List[Long]]]): GR[Company] = GR{ 
     prs => import prs._ 
      CompanyTest.tupled((<<[Long], <<[String],<<?[List[Long]])) 
     } 
    class CompanyTable(_tableTag: Tag) extends Table[Company](_tableTag, Some("base"), "Company") { 
     def * = (id, name,companyTypeId) <> (CompanyTest.tupled, CompanyTest.unapply) 
     def ? = (Rep.Some(id), Rep.Some(name), companyTypeId).shaped.<>({r=>import r._; _1.map(_=> CompanyTest.tupled((_1.get, _2.get _3)))}, (_:Any) => throw new Exception("Inserting into ? projection not supported.")) 
     val id: Rep[Long] = column[Long]("CompanyId", O.AutoInc, O.PrimaryKey) 
     val name: Rep[String] = column[String]("Name", O.Length(250,varying=true)) 
     val companyTypeId: Rep[Option[List[Long]]] = column[Option[List[Long]]]("CompanyTypeId", O.Length(19,varying=false), O.Default(None)) 
     } 
    lazy val companyTable = new TableQuery(tag => new CompanyTable(tag)) 

i companyTypeId aramak istediğiniz ve ben companyTable.filter(_.companyTypeId === Some(List(1,2))) tarafından yapıyor ama Vector() elde çalıştım Option[List[Long]]

ve {1} .Ben Postgres olduğum gibi masa companyTypeId ile veri satırı yaşıyor DB.

Şimdiden teşekkürler.

+0

nasıl veritabanında varlık görünüyor? Değerlerin bir listesini gerçekten tek bir sütunda saklıyor musunuz? –

+0

@Gregor Raýman ... evet {1,2,3} gibi görünüyor ve Veri Türü bigint [] – Jet

+1

İlginç. Normalleştirdiğimi varsayalım, başka bir bağlantılı tablo sizin için bir seçenek değildir. Dizi sütunları için Slick desteğinin nasıl desteklendiğinden emin değilim, ancak bu [iş parçacığı] (https://groups.google.com/forum/#!topic/scalaquery/v7lhyCd8_6k) yardımcı olabilir. –

cevap

1

Eğer bu şekilde deneyebilirsiniz olabilir:

companyTable.filter(_.companyTypeId inSet(Traversable(List(1,2)))) 
// the above query filters rows with values in the given list 
+0

@bhavya ..... Type Mismatch hatasını beklediğim gibi alıyorum: Traversable [Liste [Long]] , gerçek: Traversable [Uzun] – Jet

+0

@Jet cevabını düzenledi – Bhavya

+0

@bhavya ... Bu soru olarak denedim aynıdır. Eğer db {1,2} ids varsa ve ben companyTable gibi bir arama yapıyorum. filtresi (_. companyTypeId inSet (Traversable (Liste (1,2)))) sonucu getirecektir.Fakat şirketimdeki şirketTable.filter (_. companyTypeId inSet (Traversable (List (1)))) vermezse Herhangi bir sonuç – Jet