AnyLogic 中具有空值的数据库多个可选过滤器
Database Multiple Optional Filters with Null values in AnyLogic
我正在尝试找到在 AnyLogic 中创建数据库条件过滤的最佳方法。数据库,如下所示:
我想做的是在 AnyLogic Main 中添加 window 12 个复选框:P1、P2、P3、...、T5、T6
如果用户勾选P1,参照上述table,需要显示A和B。
如果用户勾选P2,需要显示C
如果用户勾选了P1和T2,需要显示A
总而言之,这就像在 Excel 中通过“x”过滤任何一组列,注意其他单元格具有空值。
首先,我使用以下代码仅过滤 P1(将条目添加到字符串类型的集合中):
collectionDescription.addAll(
selectFrom( data_base ).
where( data_base.P1.eq("x")).
list( data_base.Col1));
现在要对 P2 也进行过滤,可以执行以下操作:
collectionDescription.addAll(
selectFrom( data_base ).
where( data_base.P1.eq("x")).
where( data_base.P2.eq("x")).
list( data_base.Col1));
按照上述逻辑,可以根据需要添加任意数量的“where”条件。但是,可能的组合实在是太多了(比如P1/P2、P1/P2/P3、P1/P3等等,你可以想象可能的组合有多少)。
所以,我想到了一个潜在的解决方案,我会添加与列一样多的“where”条件,而不是添加“.eq(”x”)”,我会添加“.eq(varP1 )”。如果勾选复选框(例如 P1),则 varP1 将等于“x”(varP1 是字符串类型的变量)。但是,如果未勾选该框,理想情况下 varP1 应该取一个表示“任何地方”的值,这样条件就不会产生任何影响。我没能找到模仿这种行为的方法。
抱歉这么久 post,但我想确保情况尽可能清楚。那我在正确的轨道上吗?对于如何解决这个问题,有任何的建议吗?非常感谢您的建议。
假设您有一个与变量 varP1 关联的复选框来定义您想要的...那么您可以做
selectFrom(db_table)
.where(varP1 ? db_table.db_column.eq("x") : db_table.db_column.isNotNull().or(db_table.db_column.isNull()))
.list();
我在这里所做的任何事情都是空值或非空值...所以如果选中该框,那么你会找到 x,否则你会找到任何东西
我正在尝试找到在 AnyLogic 中创建数据库条件过滤的最佳方法。数据库,如下所示:
我想做的是在 AnyLogic Main 中添加 window 12 个复选框:P1、P2、P3、...、T5、T6
如果用户勾选P1,参照上述table,需要显示A和B。
如果用户勾选P2,需要显示C
如果用户勾选了P1和T2,需要显示A
总而言之,这就像在 Excel 中通过“x”过滤任何一组列,注意其他单元格具有空值。
首先,我使用以下代码仅过滤 P1(将条目添加到字符串类型的集合中):
collectionDescription.addAll(
selectFrom( data_base ).
where( data_base.P1.eq("x")).
list( data_base.Col1));
现在要对 P2 也进行过滤,可以执行以下操作:
collectionDescription.addAll(
selectFrom( data_base ).
where( data_base.P1.eq("x")).
where( data_base.P2.eq("x")).
list( data_base.Col1));
按照上述逻辑,可以根据需要添加任意数量的“where”条件。但是,可能的组合实在是太多了(比如P1/P2、P1/P2/P3、P1/P3等等,你可以想象可能的组合有多少)。
所以,我想到了一个潜在的解决方案,我会添加与列一样多的“where”条件,而不是添加“.eq(”x”)”,我会添加“.eq(varP1 )”。如果勾选复选框(例如 P1),则 varP1 将等于“x”(varP1 是字符串类型的变量)。但是,如果未勾选该框,理想情况下 varP1 应该取一个表示“任何地方”的值,这样条件就不会产生任何影响。我没能找到模仿这种行为的方法。
抱歉这么久 post,但我想确保情况尽可能清楚。那我在正确的轨道上吗?对于如何解决这个问题,有任何的建议吗?非常感谢您的建议。
假设您有一个与变量 varP1 关联的复选框来定义您想要的...那么您可以做
selectFrom(db_table)
.where(varP1 ? db_table.db_column.eq("x") : db_table.db_column.isNotNull().or(db_table.db_column.isNull()))
.list();
我在这里所做的任何事情都是空值或非空值...所以如果选中该框,那么你会找到 x,否则你会找到任何东西