You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Room条件查询:如何结合IN与未分配状态筛选数据

Android Room 多条件筛选优化:支持未分配条目与成员筛选组合

原有实现

我之前用的Android Room查询语句是这样的:

SELECT * FROM Model WHERE (:applyAssigneeFilters IS 0 OR assigneeMemberId IN(:assigneeFilters))...

通过布尔参数applyAssigneeFilters控制是否筛选assigneeMemberId在assigneeFilters列表里的数据,之前运行没问题。

新需求

现在要加「未分配」条目筛选的选项,还得支持和成员筛选组合使用。UI端的复选选项如下:

  • 未分配
  • Member1
  • Member2

之前applyAssigneeFilters只用来判断assigneeFilters.isEmpty(),现在需要实现三种筛选逻辑:

  • 只筛未分配的条目
  • 同时筛未分配条目和指定成员的条目
  • 只筛指定成员的条目

数据与筛选示例

测试数据

Item(id: 1, memberId: 1, unassigned: false)
Item(id: 2, memberId: 2, unassigned: false)
Item(id: 3, memberId: null, unassigned: true)

场景1:仅勾选「未分配」

选择状态:

[X] 未分配
[ ] Member1
[ ] Member2

预期结果:

Item(id: 3, memberId: null, unassigned: true)

场景2:勾选「未分配」+「Member2」

选择状态:

[X] 未分配
[ ] Member1
[X] Member2

预期结果:

Item(id: 2, memberId: 2, unassigned: false)
Item(id: 3, memberId: null, unassigned: true)

场景3:勾选「Member1」+「Member2」

选择状态:

[ ] 未分配
[X] Member1
[X] Member2

预期结果:

Item(id: 1, memberId: 1, unassigned: false)
Item(id: 2, memberId: 2, unassigned: false)

解决方案:修改后的查询语句

新增布尔参数includeUnassigned标记是否勾选「未分配」选项,组合后的查询语句如下:

SELECT * FROM Model 
WHERE 
  -- 全不选时返回所有数据
  (:includeUnassigned = 0 AND :applyAssigneeFilters = 0)
  OR
  (
    -- 匹配未分配条目
    (:includeUnassigned = 1 AND unassigned = 1)
    OR
    -- 匹配指定成员条目
    (:applyAssigneeFilters = 1 AND assigneeMemberId IN(:assigneeFilters))
  )

参数说明

  • includeUnassigned:传1表示勾选「未分配」,传0表示未勾选
  • applyAssigneeFilters:传1表示至少勾选了一个成员选项(此时assigneeFilters是选中成员的ID列表),传0表示没勾选任何成员选项
  • 两个参数都为0时,返回全部数据(对应UI全不选的场景)

内容的提问来源于stack exchange,提问作者Bresiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:25:17