c# - Linq OrderBy 使用自定义排序顺序

标签 c# linq sorting nhibernate enums

我目前正在动态构建一个 linq 表达式树,仅使用类型和属性名称以及此处找到的代码:“Dynamic LINQ OrderBy on IEnumerable<T>”,请参阅已接受的答案。

这适用于大多数属性,但当属性类型是枚举时,我需要自定义排序顺序,例如按值的字符串表示形式排序,这可能因语言而异。

例如我有一个车辆类型列表。

public enum VehicleType : int
{
    Car = 1,
    Train = 2,
    Bike = 3,
    etc...
}

在英语中,名称将是“Car”、“Bike”和“Train”,但在法语中,它们将是“Voiture”、“Train”和“Vélo”,因此显然排序顺序会有所不同。

构建的表达式必须与 NHibernate(版本 3.3.1.4000)兼容。枚举排序前后可能会添加排序。

我有针对给定语言正确排序的枚举列表(或数组),例如在英语中,列表将被排序为“自行车”、“汽车”和“火车”,而在法语中,列表将被排序为“火车”、“自行车”和“汽车”,这将转换为所需的顺序 3、1、2 或 2、3, 1.

无法从数据库中访问枚举值的翻译。例如。我无法查找给定值和语言的名称。

本质上,我需要的是一种通过排序列表中枚举值的索引对搜索结果进行排序的方法。

这可能吗?

最佳答案

所以构建 sjkm 的答案你应该可以这样做。

VehicleList.OrderBy(Vehicle => (int)Vehicle.VehicleType);

此外,您还需要确保您有 System.Linq 的使用声明。

关于c# - Linq OrderBy 使用自定义排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22847587/

相关文章:

c# - Windows 8 中的透明度(Metro 应用程序)

c# - 你能从 web api Controller 同时调用 GET 和 POST 吗?

c# - Linq to SQL DataContext 无法更新数据库中继承对象的枚举字段

c# - 通用 Linq 排序函数?

linq - Entity Framework - System.IndexOutOfRangeException

c - 如何修复选择排序交换访问冲突

c# - 共享图像仅显示两个选项,Mail 和 Onenote

c# - 测试模拟对象构造函数

c++ - 如何对项目列表很长的文件进行排序?

c++ - 为什么插入排序最好的情况是大 O 复杂度 O(n)?