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

Xamarin Forms中如何让SearchBar同时检索Post类的Title和Location字段?

实现思路

原有逻辑仅对PostClass的Title字段做关键词匹配,要新增Location字段的匹配,只需在Where过滤条件中新增或逻辑的Location匹配规则即可,同时建议补充空值校验,避免字段为null时调用ToLower()触发空引用异常。


核心修改点

将原过滤行:

var results = posts.Where(x => x.Title.ToLower().Contains(keyword.ToLower()));

替换为:

var results = posts.Where(x => 
    // 匹配Title,先判空避免空引用
    (x.Title != null && x.Title.ToLower().Contains(keyword.ToLower())) 
    // 新增Location匹配逻辑
    || (x.Location != null && x.Location.ToLower().Contains(keyword.ToLower()))
);

修改后完整代码

private void searchBarmainPage_TextChanged(object sender, TextChangedEventArgs e)
{
    try
    {    
        using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
        {
            var keyword = e.NewTextValue; 
            conn.CreateTable<PostClass>();
            var posts = conn.Table<PostClass>().ToList();
            if(keyword.Length >= 1)
            {
                // 同时匹配Title和Location
                var results = posts.Where(x => 
                    (x.Title != null && x.Title.ToLower().Contains(keyword.ToLower())) 
                    || (x.Location != null && x.Location.ToLower().Contains(keyword.ToLower()))
                );
                listViewMainPage.ItemsSource = results;
                listViewMainPage.IsVisible = true;
            }
            else
            {
                listViewMainPage.IsVisible = false;
            }
        }
    } 
    catch (NullReferenceException r)
    {
    }
    catch (Exception m)
    {
    }
}

可选优化(推荐)

当前逻辑是先把整张表的数据全部加载到内存再做过滤,数据量较大时性能较差,可以直接在SQLite查询层面完成过滤,减少内存开销:

// 去掉.ToList(),直接在IQueryable层面过滤,查询会被转换为SQL语句执行
var results = conn.Table<PostClass>()
                .Where(x => 
                    x.Title.Contains(keyword) 
                    || x.Location.Contains(keyword)
                ).ToList();

注:SQLite的查询默认不区分大小写,不需要额外调用ToLower()处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:27:06