使用 LINQ 包含 - 如何确保不跟随特定字符
Posted
技术标签:
【中文标题】使用 LINQ 包含 - 如何确保不跟随特定字符【英文标题】:Using LINQ Contains - How to make sure a specific character does not follow 【发布时间】:2019-07-21 08:26:30 【问题描述】:我有以下 linq:
var s = string.Join(",", products.Where(p => p.Query.Contains(tableName))
.Select(p => p.ProductId.ToString()));
我正在搜索一个列表,但我想省略表名不是确切表的项目。确切地说,有些表格的末尾有一个额外的数字,并且想要省略这些。
例如,如果我搜索 table1 的字符串,它不应该包括 table10
以下内容将包含在上面的查询数据中:
包括:
this is a test table1 found
This is another test table1(some other data here)
thistable1shouldbeincluded
不包括
this is a text table10 found
table10is here
testing this should not be included table18(testing)
基本上,检查将确保数字 0-9 不符合 contains 语句中的搜索条件。其他任何事情都可以跟随。我想将它保留为同一个 linq 的一部分,并且尽可能简单。感谢您的帮助!
【问题讨论】:
当你的table
不以数字结尾时,比如table
,你想返回table1here
这样的实体吗?不清楚这里的边界是什么。
你可能想使用正则表达式来做到这一点
@Rango -- 好点子!
维克托,感谢您的意见。无论表名以数字结尾还是不以数字结尾,Matt 的以下回答都能正常工作。
【参考方案1】:
试试正则表达式:table1(?!\d)
Demo
var s = string.Join(",", products.Where(p => Regex.IsMatch(p.Query, $@"tableName(?!\d)"))
.Select(p => p.ProductId.ToString()));
【讨论】:
以上是关于使用 LINQ 包含 - 如何确保不跟随特定字符的主要内容,如果未能解决你的问题,请参考以下文章
如果跟随 Skip(..) LINQ 部分,则 XML 字段上的自定义 SQLFunctionTemplate 会导致转义错误
如何使用 Linq where 条件检查字符串列表是不是包含任何字符串
如何使用 LINQ 查找包含 2 个逗号分隔的字符串的匹配项