如何在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) |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 5 | 2 |
| 6 | 3 |
| 4 | 3 |
预期列表
| A (ordering) | B (data_id) |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 1 |
| 5 | 2 |
| 6 | 3 |
解决方案
观察预期排序规则:首先将元素按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
相关产品推荐
相关产品推荐

