微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在AnyLogic中数据库多个具有空值的可选过滤器

如何解决在AnyLogic中数据库多个具有空值的可选过滤器

我试图找到在AnyLogic中创建数据库条件过滤的最佳方法。该数据库如下所示:

enter image description here

我想做的是在AnyLogic主窗口中添加12个复选框:P1,P2,P3,...,T5,T6

如果用户参照上表检查P1,则需要显示A和B。
如果用户选中P2,则需要显示C
如果用户检查了P1和T2,则需要播放A

总而言之,这就像在Excel中通过“ x”过滤任何列集一样,注意到其他单元格具有空值。

首先,我使用以下代码仅对P1进行过滤(将条目添加到String类型的集合中):

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(varP1)”,而不是添加“ .eq(“ x”)“。 。如果勾选了一个复选框(例如P1),则varP1等于“ x”(varP1是String类型的变量)。但是,如果未选中该框,则理想情况下varP1应该采用表示“ where any”的值,以便该条件不会产生任何影响。我没有找到模仿这种行为的方法

很抱歉,很长的帖子,但我想确保情况尽可能清楚。那么我在正确的轨道上吗?对于如何解决这个问题,有任何的建议吗?您的建议将不胜感激。

解决方法

假设您有一个与变量varP1关联的复选框,以定义所需的内容...然后就可以

selectFrom(db_table)
    .where(varP1 ? db_table.db_column.eq("x") : db_table.db_column.isNotNull().or(db_table.db_column.isNull()))
    .list();

我在这里所做的任何事情都是null或不为null的任何值...因此,如果选中此框,则将找到x,否则将找到任何东西

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。