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

如何在ASP.NET Core MVC中用Razor实现指定规则的双列列表排序?

如何实现指定的双列Linq排序

我尝试用以下两种Linq方式对列表进行双列排序:

var xx = _context.tablename.OrderBy(s=> new { s.ordering, s.data_id }).ToList();
var xx = _context.tablename.OrderBy(s=> s.ordering).ThenBy(s=> s.data_id).ToList();

但都没有得到预期结果。

当前列表

A (ordering)B (data_id)
11
21
32
52
63
43

预期列表

A (ordering)B (data_id)
11
22
33
41
52
63

解决方案

观察预期排序规则:首先将元素按ordering - data_id的值分组(差值为0的为第一组,差值为3的为第二组),组内再按data_id升序排列。

对应的Linq实现可以用两种方式:

方式一:分步排序

var xx = _context.tablename
    .OrderBy(s => s.ordering - s.data_id) // 先按差值分组
    .ThenBy(s => s.data_id) // 组内按data_id升序
    .ToList();

方式二:匿名类型排序键

var xx = _context.tablename
    .OrderBy(s => new { GroupKey = s.ordering - s.data_id, s.data_id })
    .ToList();

两种方式都能得到预期的排序结果,其中方式一的可读性更强,适合大多数场景。


内容的提问来源于stack exchange,提问作者Jahanzaib Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:31