You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用OrderBy对集合排序不生效的问题求助

问题原因

OrderBy 是LINQ提供的无副作用查询方法,不会修改原始集合本身,仅会返回一个按规则排序后的新序列。你当前代码没有接收OrderBy的返回值,原始集合的顺序完全没有发生变化,所以遍历输出还是原有顺序。

修正方案

推荐先执行筛选操作再做排序,避免对后续要删除的元素做无意义的排序计算,修正代码如下:

Accounts? ac = await Client.SendRequest<Accounts>(tk.access_token, Method.GET, "/UploadedAccounts", "");
// 先执行筛选,RemoveAll会直接修改原集合
ac.value.RemoveAll(x => x.Year.ToString() != YearBox.Text);

// 方式1:直接遍历排序后的返回序列
foreach (var a in ac.value.OrderBy(x => x.Amount)) {
    ListViewBox.Items.Add(a.CompanyLegalName + " / " + a.Year + "-" + a.Month + " / " + a.AccountName + " / " + a.AccountCode + " / " + a.AccountType + " / " + a.Amount + " / " + a.Dimension , 0);
}

// 方式2:如果需要永久修改ac.value的排序,将排序结果赋值回去即可(ac.value为List<T>场景)
// ac.value = ac.value.OrderBy(x => x.Amount).ToList();

如果需要多次使用排序后的集合,建议先将OrderBy返回的序列转为List或Array存储,避免重复执行排序逻辑。

内容的提问来源于stack exchange,提问作者Thomas Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:45:02