我正在创建一项服务,使用户可以轻松地从 IANA - Protocol Registry 中选择协议(protocol)。 .
正如您想象的那样,在注册表中搜索术语 http
拉了很多点击率。自 amt-soap-http
将被用户选择的频率远低于直接 http
我决定把所有以 http
开头的东西都去掉是个好主意。然后将其与其余结果连接起来。
下面的 lambda 表达式是这个思考过程的结果:
var records = this._ianaRegistryService.GetAllLike(term).ToList();
var results = records.Where(r => r.Name.StartsWith(term))
.OrderBy(r => r.Name)
.Concat(records.Where(r => !r.Name.StartsWith(term))
.OrderBy(r => r.Name))
.Take(MaxResultSize);
不幸的是,我觉得我对结果进行了不必要的多次迭代。除了过早的优化考虑之外,是否存在比上述更有效的 lambda 表达式组合?
最佳答案
两步排序可能更有效:
var results = records.OrderBy(r => r.Name.StartsWith(term) ? 1 : 2)
.ThenBy(r => r.Name)
.Take(MaxResultSize);
关于c# - 如何有效地限制然后将结果与 linq/lambda 表达式连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884291/