скалярное получение значений - PullRequest
1 голос
/ 19 сентября 2011

У меня есть несколько таблиц, скажем, 2 для простоты.Я могу создать их таким образом:

...
val tableA = new Table[(Int,Int)]("tableA"){
def a = column[Int]("a")
def b = column[Int]("b")
}

val tableB = new Table[(Int,Int)]("tableB"){
def a = column[Int]("a")
def b = column[Int]("b")
}

Я собираюсь получить запрос для получения значения 'a' из таблицы A и значения 'a' из таблицы B в виде списка внутри результатов из 'a' моего результатадолжно быть:

List[(a,List(b))]

пока я дошел до этой точки в запросе,

def createSecondItr(b1:NamedColumn[Int]) = for(
    b2 <- tableB if b1 === b1.b
    ) yield b2.a

val q1 = for (
a1 <- tableA
listB = createSecondItr(a1.b)
) yield (a1.a , listB)

я не проверял код, поэтому в коде могут быть ошибки.Моя проблема в том, что я не могу получить данные из результатов.

, чтобы понять вопрос, сесть на поезда и уроки по нему.Вы ищете поезда после 12:00, и вам нужно иметь набор результатов, в котором название поезда и классы, которые есть в списке в списке результатов поезда.

1 Ответ

1 голос
/ 27 августа 2012

Я не думаю, что вы можете сделать это напрямую в ScalaQuery. То, что я сделал бы, это сделать нормальное объединение и затем соответственно обработать результат:

import scala.collection.mutable.{HashMap, Set, MultiMap}

def list2multimap[A, B](list: List[(A, B)]) = 
  list.foldLeft(new HashMap[A, Set[B]] with MultiMap[A, B]){(acc, pair) => acc.addBinding(pair._1, pair._2)}

val q = for (
     a <- tableA
     b <- tableB
     if (a.b === b.b)
) yield (a.a, b.a)

list2multimap(q.list)

Список list2multimap взят из https://stackoverflow.com/a/7210191/66686

Код написан без помощи IDE, компилятора или чего-либо подобного. Рассмотрим бесплатное обучение по отладке: -)

...