gpt4 book ai didi

c# - 使用LINQ取前100名和后100名?

转载 作者:IT王子 更新时间:2023-10-29 04:33:26 24 4
gpt4 key购买 nike

我想做这样的事情(如下),但不确定是否有正式/优化的语法可以这样做?

.Orderby(i => i.Value1)
.Take("Bottom 100 & Top 100")
.Orderby(i => i.Value2);

基本上,我想按一个变量排序,然后取前 100 个和后 100 个,然后按另一个变量对这些结果进行排序。

有什么建议吗?

最佳答案

var sorted = list.OrderBy(i => i.Value);
var top100 = sorted.Take(100);
var last100 = sorted.Reverse().Take(100);
var result = top100.Concat(last100).OrderBy(i => i.Value2);

不知道你最后要Concat还是UnionConcat 将合并两个列表的所有条目,即使存在相似的条目(如果您的原始列表包含少于 200 个条目,情况就是如此)。 Union 只会添加 last100 中尚未进入 top100 的内容。

一些不清楚但应该考虑的事情:

  • 如果 list 是数据库的 IQueryable,建议使用 ToArray()ToList (),例如

    var sorted = list.OrderBy(i => i.Value).ToArray();

    一开始。这样一来,只对数据库进行一次查询,其余的都在内存中完成。

  • Reverse 方法没有按照我希望的方式进行优化,但这应该不是问题,因为对列表进行排序才是真正的问题。不过,为了记录,此处其他答案中解释的 skip 方法可能要快一点,但需要知道 list 中的元素数量。

  • 如果 list 是一个 LinkedList 或另一个实现 IList 的类,则 Reverse 方法可以以优化的方式完成。

关于c# - 使用LINQ取前100名和后100名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com