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

ahs*_*ele 5 c# lambda concat

我正在创建服务,以便用户轻松地从IANA协议注册表中选择协议.

正如您可能想象的那样,在注册表中搜索该术语会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);
Run Code Online (Sandbox Code Playgroud)

不幸的是,我觉得我在结果中迭代的时间超过了必要的次数.除了过早的优化考虑因素有一个lambda表达式的组合,它会比上面的更有效吗?

D S*_*ley 5

作为两步排序可能更有效:

var results = records.OrderBy(r => r.Name.StartsWith(term) ? 1 : 2)
                     .ThenBy(r => r.Name)
                     .Take(MaxResultSize);
Run Code Online (Sandbox Code Playgroud)