【发布时间】:2015-08-30 08:09:40
【问题描述】:
我正在阅读 C# 5,所以我想出了一个问题:
假设我们在数据库中有一个有几行的表,每一行是一个字符串字段,现在我想从字段中删除所有元音。所以我们可以这样写:
var query = names
.Select (n => n.Replace ("a", "").Replace ("e", "").Replace ("i", "")
.Replace ("o", "").Replace ("u", ""))
.Where (n => n.Length > 2)
.OrderBy (n => n);
你可以看到.Replace方法调用了五次,所以我们可以很容易地用正则表达式代替字符串的替换:
n => Regex.Replace (n, "[aeiou]", "")
本书建议在数据库查询中最好使用字符串的替换而不是正则表达式的替换。
我的问题是它是如何区分的?哪个效率更高?
【问题讨论】:
-
这并不重要。如果有“几行” - 无论如何它都会很快,如果有数百万行,那么你应该解决你的问题是
Where (n => n.Length > 2)和OrderBy (n => n)。 -
如果这是 LINQ-To-SQL,那么一些 sql 提供者不理解 RegEx,而几乎所有提供者都有某种字符串替换功能。 RegEx 替换可能无法转换为 SQL。
-
@zerkms:如果是 Linq-To-Sql,它肯定会转换为提供者对 SQL 是什么的想法。
标签: c# regex performance linq