如何在C#中按名称对Enum枚举的Linq查询结果排序?
按枚举名称排序的实现方法
你可以直接在Linq查询链中添加OrderBy方法,基于枚举名称完成排序,具体分几种场景处理:
1. 对筛选后的名称字符串直接排序
如果你的Select最终返回的还是枚举名称字符串,只需在查询末尾追加排序逻辑即可:
Enum.GetNames(x.options) .Where(...) // 你的筛选条件 .Select(...) // 若返回结果为名称字符串 .OrderBy(name => name); // 按名称升序排序
如果需要倒序排列,换成OrderByDescending(name => name)即可。
2. 转换为枚举值后按名称排序
如果你的Select是将名称转换为枚举值,建议先保留名称字段用于排序,最后再提取目标枚举值:
Enum.GetNames(x.options) .Where(...) // 你的筛选条件 .Select(name => new { Name = name, EnumValue = Enum.Parse(x.options, name) }) .OrderBy(item => item.Name) // 按名称排序 .Select(item => item.EnumValue); // 最终返回枚举值
3. 先排序再筛选(简洁写法)
如果业务逻辑允许,也可以先对所有枚举名称排序,再执行筛选和转换操作:
Enum.GetNames(x.options) .OrderBy(name => name) // 先按名称排序 .Where(...) // 再执行筛选 .Select(...); // 最后完成转换
补充说明
Enum.GetNames返回的是枚举成员的名称数组,OrderBy(name => name)会按照默认的字符串字典序完成排序,能满足绝大多数场景的需求。
内容的提问来源于stack exchange,提问作者Federico De Armas
相关产品推荐
相关产品推荐

