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

如何使用Isar Link结合QueryGroup实现餐厅多条件过滤?

解决方案

1. 更新QueryGroup类,支持多地点过滤条件

首先修改你的QueryGroup类,用地点ID列表替代原来的单个地点ID字段,用来存储需要筛选的多个地点:

class QueryGroup {
  final String? nameKeyword;
  // 替换单个locationId为多地点ID列表
  final List<int>? locationIds;

  QueryGroup({
    this.nameKeyword,
    this.locationIds,
  });
}

2. 修改searchRestaurantsWithQueryGroup方法实现多地点OR过滤

利用Isar数据库原生的anyOf方法,就能快速实现「多地点任意匹配」的OR逻辑,同时保留餐厅名称的模糊搜索条件:

Future<List<Restaurant>> searchRestaurantsWithQueryGroup(Isar isar, QueryGroup queryGroup) async {
  final query = isar.restaurants.filter();

  // 处理餐厅名称模糊匹配(包含指定字符串)
  if (queryGroup.nameKeyword != null && queryGroup.nameKeyword!.isNotEmpty) {
    query.nameContains(queryGroup.nameKeyword!, caseSensitive: false);
  }

  // 处理多地点OR过滤(属于任意指定地点)
  if (queryGroup.locationIds != null && queryGroup.locationIds!.isNotEmpty) {
    query.locationIdAnyOf(queryGroup.locationIds!);
  }

  return await query.findAll();
}

补充说明

  • 如果你的Restaurant模型是通过关联对象(而非直接存储locationId)关联Location,可以改用关联查询的anyOf方法,比如:
    query.location((loc) => loc.nameAnyOf(queryGroup.locationNames!));
    
  • 边界兼容:当locationIds为空或长度为0时,会自动跳过地点过滤,和原有逻辑完全兼容;当列表只有一个ID时,效果和原来的单个地点过滤一致。
  • Isar的anyOf方法是原生优化的OR逻辑实现,性能比手动拼接多个or条件更好,优先推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:22:07