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

10-17 01:21