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

如何在Razor页面表格中格式化搜索字符串实现多列AND组合查询

Razor页面数据表组合搜索优化方案

当前代码用||(逻辑或)做判断,只能匹配单个关键词在任意字段的情况,输入“March 2020”时,单个字段没法包含完整的组合字符串,所以无结果。要实现多关键词的AND组合搜索,得拆分关键词后分别匹配对应字段,再用AND逻辑组合条件。

方案一:精准区分月份和年份关键词

如果明确要区分月份和年份词,你可以这样改代码:

if (!String.IsNullOrEmpty(searchString))
{
    // 按空格拆分搜索词,去掉空内容
    var searchWords = searchString.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    // 定义所有月份的列表,用于判断关键词是否为月份
    var months = new List<string> {"January", "February", "March", "April", "May", "June", 
                                 "July", "August", "September", "October", "November", "December"};

    foreach (var word in searchWords)
    {
        // 忽略大小写判断是否为月份
        if (months.Contains(word, StringComparer.OrdinalIgnoreCase))
        {
            // 添加月份匹配的AND条件
            referral = referral.Where(s => s.BoardMtgMonth.Contains(word, StringComparison.OrdinalIgnoreCase));
        }
        // 判断是否为数字(年份)
        else if (int.TryParse(word, out _))
        {
            // 添加年份匹配的AND条件
            referral = referral.Where(s => s.BoardMtgYear.Contains(word));
        }
        else
        {
            // 其他关键词保留原有逻辑:匹配任意字段
            referral = referral.Where(s => s.BoardMtgMonth.Contains(word) || s.BoardMtgYear.Contains(word));
        }
    }
}

这段代码的逻辑:

  • 拆分搜索字符串成独立关键词,处理多词组合
  • 用月份列表判断关键词是否为月份,用数字转换判断是否为年份
  • 对月份词,强制匹配月份字段;对年份词,强制匹配年份字段
  • 多次调用Where相当于叠加AND逻辑,最终实现“月份+年份”的精准组合匹配

方案二:通用多关键词AND匹配

如果不需要严格区分月份和年份,只是要求所有输入的关键词都能在任意字段找到(整体是AND关系),可以用更简洁的写法:

if (!String.IsNullOrEmpty(searchString))
{
    var searchWords = searchString.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    foreach (var word in searchWords)
    {
        var currentWord = word; // 捕获循环变量,避免闭包问题
        referral = referral.Where(s => s.BoardMtgMonth.Contains(currentWord) || s.BoardMtgYear.Contains(currentWord));
    }
}

这段代码的效果:每个关键词都必须在月份或年份字段中出现,多个关键词之间是AND关系。输入“March 2020”时,因为年份字段不可能包含March,月份字段不可能包含2020,所以最终等价于“月份包含March且年份包含2020”,同样能得到你要的结果。

关键说明

原来的||是单个关键词匹配任意字段的OR逻辑,现在要实现多词组合的AND逻辑,必须替换原有的单一判断,改成遍历关键词并叠加Where条件(多次Where默认是AND关系)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:05:16