如何在LINQ中实现忽略大小写的文本过滤
实现VB.NET忽略大小写的过滤匹配
没问题,这个需求在日常开发里太常见了,咱们可以用几种简单的方式来修改你的代码,实现不区分大小写的筛选效果:
使用
StringComparison枚举的IndexOf方法
这是最直接高效的方式,因为String.Contains本身没有直接支持忽略大小写的重载,但我们可以用IndexOf来替代,它支持指定匹配规则:Dim query = CsteList.Where(Function(i) i.Text.IndexOf(FilterTextBox.Text.Trim(), StringComparison.OrdinalIgnoreCase) >= 0)简单说:
IndexOf返回匹配字符串的起始索引,如果没找到就返回-1,加上StringComparison.OrdinalIgnoreCase就会忽略大小写进行匹配,完全符合你的需求。统一转换为大小写后比较
另一种直观的方式是把待匹配的文本和过滤文本都转换成小写(或大写),再用Contains比较:Dim filterText = FilterTextBox.Text.Trim().ToLowerInvariant() Dim query = CsteList.Where(Function(i) i.Text.ToLowerInvariant().Contains(filterText))这里推荐用
ToLowerInvariant()/ToUpperInvariant()而不是普通的ToLower()/ToUpper(),因为后者会受系统区域文化影响,可能出现一些意外的匹配问题。使用正则表达式(适合复杂匹配场景)
如果之后你需要更灵活的匹配规则(比如通配符),正则表达式是个不错的选择,记得要转义输入里的特殊正则字符:Dim filterText = FilterTextBox.Text.Trim() Dim query = CsteList.Where(Function(i) Regex.IsMatch(i.Text, Regex.Escape(filterText), RegexOptions.IgnoreCase))Regex.Escape()会把输入里的.,*,?这类正则特殊字符转义,避免它们被当作正则语法解析。
如果只是单纯的“包含”匹配,第一种方法是最优解,简洁又高效。
内容的提问来源于stack exchange,提问作者Namitha
相关产品推荐
相关产品推荐

