【问题标题】:Database Multiple Optional Filters with Null values in AnyLogicAnyLogic中具有空值的数据库多个可选过滤器
【发布时间】:2021-02-04 02:38:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: anylogic


    【解决方案1】:

    假设您有一个与变量 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,否则你会找到任何东西

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2021-07-04
      • 2011-10-01
      • 1970-01-01
      • 2022-07-08
      • 2013-03-09
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      相关资源
      最近更新 更多