Агрегация Slick 2 — как получить скалярный результат?

У меня есть таблица с Int столбцом TIME в ней:

def time = column[Int]("TIME")

таблица сопоставляется с пользовательским типом. Я хочу найти максимальное значение времени, т.е. выполнить простую агрегацию. Пример в документации кажется достаточно простым:

val q = coffees.map(_.price)
val q1 = q.min
val q2 = q.max

Однако, когда я это делаю, тип q1 и q2 равен Column[Option[Int]]. Я могу выполнить get или getOrElse, чтобы получить результат типа Column[Int] (даже это кажется мне несколько удивительным — является ли get членом Column или значение преобразуется из Option[Int] в Int, а затем снова переносится в столбец? Почему? ), но я не могу использовать скалярное значение, когда я пытаюсь присвоить его Int, я получаю сообщение об ошибке:

type mismatch;
 found   : scala.slick.lifted.Column[Int]
 required: Int

Как я могу получить значение scala из агрегированного запроса?


person Suma    schedule 23.05.2014    source источник
comment
Следующие вопросы, похоже, решают одну и ту же проблему -2-0 stackoverflow.com/questions/20277958/   -  person Suma    schedule 23.05.2014


Ответы (1)


Я предполагаю, что вы не вызываете вызывающего, поэтому вы получаете объект Column. Попробуй это:

val q1 = q.min.run

Должен вернуть Option[Int], а затем вы можете get или getOrElse.

person Ende Neu    schedule 23.05.2014
comment
Здорово. бег - это то, чего мне не хватало. Я пробовал список или сначала, как в обычных запросах, но это не сработало. Тем не менее, похоже, что run возвращает Option[Int], поэтому run.get или run.getOrElse кажутся необходимыми. - person Suma; 23.05.2014
comment
Ах да, это зависит от того, имеет ли ваш столбец значение NULL, запрос возвращает Option, если вы не получаете непосредственно значение, в вашем случае, вероятно, оно допускает значение NULL, и вам нужно get или getOrElse, я отредактирую свой ответ. - person Ende Neu; 23.05.2014
comment
Я не думаю, что мой столбец имеет значение NULL (в вопрос добавлено определение). Возможно, агрегация должна справляться с ситуацией, когда записей вообще нет, и в этом случае агрегации быть не может? - person Suma; 23.05.2014
comment
Точно. Вот почему Сума! - person cvogt; 23.05.2014
comment
@Suma спасибо за редактирование, пришлось отказаться от клавиатуры. - person Ende Neu; 23.05.2014