【发布时间】:2019-07-08 07:29:20
【问题描述】:
我尝试了具有数字和字符的 C# 排序顺序。
List<EmployeesSTPList> employeeList = new List<EmployeesSTPList>();
employeeList.Add(new EmployeesSTPList { ID = "2", Name = "Employee 2" });
employeeList.Add(new EmployeesSTPList { ID = "1", Name = "Employee 1" });
employeeList.Add(new EmployeesSTPList { ID = "3", Name = "Employee 3" });
employeeList.Add(new EmployeesSTPList { ID = "10", Name = "Employee 10" });
employeeList.Add(new EmployeesSTPList { ID = "EMP002", Name = "Employee 02" });
employeeList.Add(new EmployeesSTPList { ID = "EMP003", Name = "Employee 03" });
employeeList.Add(new EmployeesSTPList { ID = "11", Name = "Employee 11" });
employeeList.Add(new EmployeesSTPList { ID = "4", Name = "Employee 4" });
employeeList.Add(new EmployeesSTPList { ID = "EMP010", Name = "Employee 010" });
employeeList.Add(new EmployeesSTPList { ID = "EMP001", Name = "Employee 01" });
employeeList.Add(new EmployeesSTPList { ID = "EMP011", Name = "Employee 011" });
employeeList = employeeList.OrderBy(a => a.ID, StringComparer.Ordinal).ToList();
foreach (var item in employeeList)
{
<div> @item.ID</div>
}
输出是:
1
10
11
2
3
4
EMP001
EMP002
EMP003
EMP010
EMP011
但预期为,
1
2
3
4
10
11
EMP001
EMP002
EMP003
EMP010
EMP011
我已经尝试过使用 StringComparer.Ordinal 对string[] 进行相同的操作,效果很好。但我的模型数据包含在列表中。
【问题讨论】:
-
要获得自定义排序,您应该编写自定义比较器:stackoverflow.com/a/8975825/444165
-
您必须搜索自然排序方案。这意味着您必须创建自己的比较器。
-
不要使用重复问题的答案,使用 Windows API
StrCmpLogicalW()for example, like this。 (注意:在 StackOverflow 上还有其他类似的答案使用StrCmpLogicalW()。)
标签: c# linq sorting natural-sort