WebAPI搜索功能如何移除大小写敏感性?
这个问题本质是字符串匹配的大小写敏感性在搞鬼~ 你只需要调整Where子句里的判断逻辑,让它忽略大小写就能解决啦。
方法一:使用Contains的重载指定不区分大小写
这是推荐的最优方式,直接给Contains方法传入StringComparison.OrdinalIgnoreCase参数,性能更好还能避免区域文化差异带来的问题:
public IHttpActionResult GetItems(string name) { // 先处理name为空的情况,避免空引用异常 if (string.IsNullOrEmpty(name)) { return Ok(new List<Item>()); // 或者返回全部条目,看你的业务需求 } List<Item> allItems = GetAllItems(); return Ok(allItems.Where(i => i.Name.Contains(name, StringComparison.OrdinalIgnoreCase))); }
方法二:统一转换为小写(或大写)后比较
如果你用的是较老的.NET版本,Contains没有上述重载的话,可以把两边字符串都转成不变文化的小写(或大写)再判断:
public IHttpActionResult GetItems(string name) { if (string.IsNullOrEmpty(name)) { return Ok(new List<Item>()); } List<Item> allItems = GetAllItems(); var targetName = name.ToLowerInvariant(); return Ok(allItems.Where(i => i.Name.ToLowerInvariant().Contains(targetName))); }
小提醒:
- 优先选第一种方法,
StringComparison.OrdinalIgnoreCase是.NET专门为不区分大小写的字符串操作优化的,比手动转大小写更高效,还能避免某些语言特殊字符转大小写的意外问题。 - 一定要记得处理
name为null或空字符串的情况,不然容易触发空引用异常哦。
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

