c# - 如何有效地限制然后将结果与 linq/lambda 表达式连接?

标签 c# lambda concat

我正在创建一项服务,使用户可以轻松地从 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/

相关文章:

mysql - 如何在 MYSQL 中将行配对在一起?

java - 为流中已有的每个元素添加一个元素到流的末尾

c# - MVC 5 本地化工作在 localhost 但不是服务器

c# - 等于 System.Collections.Generic.List<T>... 的方法?

c# - 在 C# 中更改辅助监视器屏幕分辨率

c# - 以编程方式在 IIS 上为自定义 Web 应用程序项目模板 vs2010 创建虚拟目录

python - 为什么 eval 函数中的 lambda 无法关闭用户定义的 'locals' 字典中的变量?

c++ - C++ 中的可选方法参数,但来自被调用方?

python - Lambda,调用自己进入lambda定义

mysql - 我可以将多个 MySQL 行连接到一个字段中吗?