使用 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 个逗号分隔的字符串的匹配项

在 JavaScript 中,如何确保数组至少有一个特定元素,而其他元素满足另一个条件?

使用 LINQ 从列表中删除特定项目

如何使用负前瞻(NOT lookbehind)来匹配在特定位置不包含给定子字符串的字符串?