C#面试题更新 2026-08-05

在 C# 开发中,要对一个集合实现多级排序,OrderBy 和 ThenBy 这两个 LINQ 方法分别承担什么角色?请结合示例说明它们的调用顺序、执行逻辑以及在使用时有哪些注意事项?

技术原理C#LINQ

考察说明

考察候选人是否理解 LINQ 中 OrderBy 与 ThenBy 的用法、排序稳定性及多级排序的执行机制。

回答思路

  1. 【回答框架 1】OrderBy 用于按主键进行升序排序,返回 IOrderedEnumerable,它并不直接修改原集合,而是生成一个新的已排序序列。ThenBy 只能跟在 OrderBy 或另一个 ThenBy 之后,用于在前一个排序键相同的情况下按次键排序,从而形成稳定的多级排序链。
  2. 【回答框架 2】执行逻辑上,OrderBy 先根据主键对整个序列进行稳定排序,当主键相同时保持原始相对顺序;ThenBy 仅对主键相同的分组内部按次键排序,不会打乱已排序的整体顺序。排序默认按升序,如需降序可使用 OrderByDescending 和 ThenByDescending。
  3. 【回答框架 3】示例:var sorted = students.OrderBy(s => s.ClassId).ThenBy(s => s.Score); 先按班级排序,同班内再按分数升序。注意排序是延迟执行的,在枚举时才会真正计算,且每次使用都会重新执行排序。
  4. 【回答框架 4】使用注意事项:OrderBy 和 ThenBy 需配合使用,单独使用 ThenBy 会编译错误,因为它们定义在 IOrderedEnumerable 上。另外,排序键的相等比较默认使用默认比较器,可通过传入自定义 IComparer 改变排序规则。
  5. 【关键点 1】OrderBy 按主键升序排序,ThenBy 在相同主键内按次键排序,二者形成稳定的多级排序。
  6. 【关键点 2】排序不修改原集合,返回新的有序序列,且延迟执行。
  7. 【关键点 3】ThenBy 只能用于 IOrderedEnumerable,单独调用会编译错误。
  8. 【关键点 4】可结合 OrderByDescending 和 ThenByDescending 实现降序多级排序。