【发布时间】:2020-11-25 23:42:42
【问题描述】:
我有一个字符串列表,其中一些格式为“LAP1_...”、“LAP2_...”、...、“LAP9_...”。我想计算所有遵循“LAP”格式的字符串加上任何整数1-9。有没有办法检查一个字符串是否包含一个包含给定范围内任何整数的子字符串?
我显然可以这样写代码:
var lapCount = recentRecords.Where(x => x.nkFileName.Contains("LAP1")||x.nkFileName.Contains("LAP2") || x.nkFileName.Contains("LAP3")
|| x.nkFileName.Contains("LAP4") || x.nkFileName.Contains("LAP5") || x.nkFileName.Contains("LAP6") || x.nkFileName.Contains("LAP7")
|| x.nkFileName.Contains("LAP8") || x.nkFileName.Contains("LAP9")).Count();
但这似乎是不必要的长。
我希望搜索看起来像这样:
var lapCount = recentRecords.Where(x => x.nkFileName.Contains("LAP[1-9]")).Count();
【问题讨论】:
-
你实际上几乎是there
-
... Regex.IsMatch(x.nkFileName, "LAP[1-9]")怎么样? -
我将代码更改为:
var lapCount = recentRecords.Where(x => Regex.IsMatch(x.nkFileName, "LAP[1-9]")).Count();,但现在出现以下错误:“LINQ to Entities 无法识别方法 'Boolean IsMatch(System.String, System.String)' 方法,并且此方法无法转换为商店表达式。” -
重要的是告诉我们您正在使用 LINQ to Entity Framework,然后您正在使用什么 EF:EF 6.x / EF Core 2.0 / EF Core 2.1 / EF Core 3.x?鉴于该错误,
recentRecords显然不是List<string>。