Как сделать динамические c ссылки на таблицы в Anylogi c? - PullRequest
0 голосов
/ 16 апреля 2020

Я смоделировал шесть машин. У каждого из них свой профиль электрической нагрузки. Профиль нагрузки представлен в таблице в AnyLogi c. У каждой машины есть своя таблица, в которой хранятся эти значения. Я перебираю значения, чтобы реализовать то же самое в TableFunctions. Теперь я сталкиваюсь со следующей проблемой: Как я могу сделать динамическую c ссылку на соответствующую таблицу. Я хотел бы выбрать конкретную таблицу c в зависимости от машинного индекса. Как определить переменную, которая динамически ссылается на соответствующий объект таблицы?

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

У вас всегда будет конечное количество машин и как представлен ваш профиль нагрузки? Если у вас есть конечное количество машин, а профиль загрузки представляет собой набор отдельных значений - или даже если вы можете хранить эти значения в одном поле для каждого элемента - тогда вы можете создать одну таблицу, например machine_load_profile, где первый столбец является load_profile_element и содержит идентификаторы элементов, а остальные столбцы имеют имена machine_0, machine_1, machine_2 и т. д. c., содержащие значения для каждого элемента профиля нагрузки. Затем вы можете получить элементы профиля загрузки для одного компьютера, например:

List<Double> dblReturnLPEs = main.selectValues(
    "SELECT machine_" + oMachine.getIndex()
    + " FROM machine_load_profile"
    + " ORDER BY load_profile_element;"
);

, и итерировать этот список или преобразовать их в массив:

dblLPEValues = dblReturnLPEs.stream().mapToDouble(Double::doubleValue).toArray();

и повторить.

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

0 голосов
/ 16 апреля 2020

не уверен, что это действительно необходимо в вашем случае, но здесь идет речь:

Вы можете сохранить ссылку на таблицу базы данных в переменной следующего типа:

com.mysema.query.sql.RelationalPathBase

При выборе значений типа double (int, String и т. Д. c.) В конкретном столбце вы можете получить столбец по индексу, вызвав variable.getColumns().get(index). Затем вам нужно привести его к соответствующему типу, как показано ниже:

List<Double> resultRows = selectFrom(variable).where( ( (com.mysema.query.types.path.NumberPath<Double>) variable.getColumns().get(1) ).eq(2.0)) .list(( (com.mysema.query.types.path.NumberPath<Double>) variable.getColumns().get(1) ));

...