包含字母和数字字符的订单下拉菜单

Order dropdown with alphabetic and numeric characters

我的 .NET Core 应用程序中有一个下拉菜单需要排序,存在以下选项:

Multimachine
2-machine
Longmachine
Cutter
Vshape
4-machine
Cooler
Infeedmachine
3-Machine
Mainmachine

我想我可以简单地使用 LINQ 对这个选项列表进行排序;所以我会在我的控制器中使用以下内容:

ViewModel.MachineData = ViewModel.MachineData.OrderBy(m => m.Name.ToString()).ToList();

虽然我的 razor view 这样做:

<div class="form-group">
 <label>Machine</label>
   <select asp-for="Machine.ID" id="MachineName" class="form-control" >
      @foreach (var Machine in Model.MachineData)
      {
       <option value="@Machine.ID">@Machine.Name</option>
      }
   </select>
</div>

我希望排序能够处理 number/letter 组合,或者至少显示一些排序,而大多数排序似乎都是错误的。我得到以下排序列表:

Cooler
Cutter
Vshape
4-machine
Longmachine
Multimachine
Mainmachine
Infeedmachine
3-Machine
2-machine

我的代码有问题吗?还是我需要过滤掉我的号码?我想先得到字母数字,然后再得到数字;或者反过来,如果这更容易实现的话。

您是否尝试过直接在视图中执行此操作?

<div class="form-group">
 <label>Machine</label>
   <select asp-for="Machine.ID" id="MachineName" class="form-control" >
      @foreach (var Machine in Model.MachineData.OrderBy(m => m.Name.ToString()).ToList())
      {
       <option value="@Machine.ID">@Machine.Name</option>
      }
   </select>
</div>

一般你的代码应该不会错:https://dotnetfiddle.net/MxvEXb