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

如何筛选CollectionView数据表中满足指定条件的特定行

实现方法

你当前用的是sqlite-net异步查询语法,要实现CollectionView只展示Number等于指定值的行,直接在数据库查询层加过滤条件即可,不需要拉取全量数据到内存后再筛选,性能更好。

单表筛选(匹配表1主键Number)

给查询方法传入目标匹配值,在ToListAsync()前追加Where条件,筛选逻辑会直接翻译成SQL在数据库端执行:

// 传入需要匹配的Number值,若Number是int/long类型请将参数类型替换为对应数值类型
public async Task<List<DB_PosteNF>> ListerPF(string targetNumber)
{
  try
  {
     return await connection.Table<DB_PosteNF>()
                           .Where(row => row.Number == targetNumber)
                           .ToListAsync();
  }
  catch (Exception ex)
  {
      StatutMessage = $"Impossible d'afficher la liste des postes de frais. \nErreur : {ex.Message}";
  }
  return new List<DB_PosteNF>();
}

调用时传入你需要匹配的xx值,拿到的结果直接绑定给CollectionView的ItemsSource就只会展示符合条件的行。

两表关联筛选(主键/外键Number匹配)

你提到的两张表关联逻辑:表1主键为Number,表2主键为Id、外键Number关联表1,分两种常见场景处理:

  • 如果CollectionView绑定展示的是表2数据,直接对表2的实体集合加外键筛选即可,假设表2对应实体类为DB_RelatedInfo:
public async Task<List<DB_RelatedInfo>> ListerRelatedRows(string targetNumber)
{
  try
  {
     return await connection.Table<DB_RelatedInfo>()
                           .Where(row => row.Number == targetNumber)
                           .ToListAsync();
  }
  catch (Exception ex)
  {
      StatutMessage = $"查询关联数据失败,错误信息:{ex.Message}";
  }
  return new List<DB_RelatedInfo>();
}
  • 如果需要同时获取表1主数据和表2关联的所有行,分两次查询即可,sqlite-net不支持原生JOIN映射实体,分开查询逻辑简单且性能足够:
public async Task<(DB_PosteNF mainRow, List<DB_RelatedInfo> relatedRows)> GetMatchedData(string targetNumber)
{
  try
  {
     // 先查表1匹配Number的主记录
     var mainData = await connection.Table<DB_PosteNF>()
                                    .FirstOrDefaultAsync(row => row.Number == targetNumber);
     if (mainData == null) return (null, new List<DB_RelatedInfo>());
     // 再查表2所有外键匹配的关联记录
     var relatedData = await connection.Table<DB_RelatedInfo>()
                                       .Where(row => row.Number == targetNumber)
                                       .ToListAsync();
     return (mainData, relatedData);
  }
  catch (Exception ex)
  {
      StatutMessage = $"查询关联数据失败,错误信息:{ex.Message}";
  }
  return (null, new List<DB_RelatedInfo>());
}

注意:不要调用无筛选的ToListAsync()拉取全表数据到内存后再过滤,数据量较大时会造成内存占用高、查询慢的问题,把筛选条件写在ToListAsync()前会自动生成带WHERE子句的SQL,走数据库索引查询效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:54:24