C# Linq替换逻辑在Jquery Datatable中筛选失效问题
问题分析与修复方案
问题根源
- 字符串替换未生效:C# 中的
string是不可变类型,Replace方法不会修改原变量,而是返回一个新的字符串。你之前的代码仅调用了Replace但未将结果赋值回apartment,导致输入的「Apartment 101」根本没被修改,最终还是用完整的原字符串去匹配,自然只能找到完全包含它的记录。 - 残留空格干扰匹配:就算替换成功,「Apartment 101」去掉「Apartment」后会变成「 101」(带前导空格),用这个值搜索的话,「Space 101」这类无前置空格的记录会被漏掉。
修复后的代码
var apartment = Request.Form.GetValues("columns[1][search][value]")[0]; if (!string.IsNullOrWhiteSpace(apartment)) { // 直接替换目标关键词,无需提前判断是否包含 apartment = apartment.Replace("Num", "") .Replace("Apartment", "") .Replace("Space", "") .Trim(); // 清除前后多余空格 data = data.Where(gsn => gsn.Apartment.Contains(apartment)); }
关键修改说明
- 赋值替换结果:每次调用
Replace后将新字符串赋值回apartment,确保替换操作真正生效。 - 简化判断逻辑:无需提前用
Contains检查,Replace遇到不存在的关键词时会直接返回原字符串,不影响结果,代码更简洁。 - 去除多余空格:用
Trim()清除替换后可能残留的前后空格,确保最终匹配的是纯数字部分(比如「101」),这样就能命中所有包含该数字的记录。
内容的提问来源于stack exchange,提问作者csharpdev
相关产品推荐
相关产品推荐

