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
相关产品推荐
相关产品推荐

