C# LINQ按起始字符然后按整个字符串对字符串列表进行排序

C# LINQ按起始字符然后按整个字符串对字符串列表进行排序,c#,list,linq,C#,List,Linq,我有一个数据列表,如下所示: 我想做的是使用LINQ按选项代码排序,然后按以“W”开头的任何盒子大小排序,然后按盒子的其余大小排序。有序列表的顺序应该与上面显示的顺序完全一致 我尝试的内容1: var check = _routeManagementService.GetAllOptionsWithBoxSizes().Select(x => new OptionDataViewModel { Id = x.Id, BoxSizeId = x.BoxSizeId,

我有一个数据列表,如下所示:

我想做的是使用LINQ按选项代码排序,然后按以“W”开头的任何盒子大小排序,然后按盒子的其余大小排序。有序列表的顺序应该与上面显示的顺序完全一致

我尝试的内容1:

var check = _routeManagementService.GetAllOptionsWithBoxSizes().Select(x => new OptionDataViewModel
{
      Id = x.Id,
      BoxSizeId = x.BoxSizeId,
      Name = x.Name,
      OptionCode = x.OptionCode,
      BoxSize = x.BoxSize,
      Time = x.Time
 }).OrderBy(x => x.OptionCode).ThenBy(x => x.BoxSize).ToList();
var check = _routeManagementService.GetAllOptionsWithBoxSizes().Select(x => new OptionDataViewModel
{
     Id = x.Id,
     BoxSizeId = x.BoxSizeId,
     Name = x.Name,
     OptionCode = x.OptionCode,
     BoxSize = x.BoxSize,
     Time = x.Time
}).OrderBy(x => x.OptionCode)
  .ThenBy(x => x.BoxSize.StartsWith("W"))
  .ThenBy(x => x.BoxSize).ToList();
我尝试的内容2:

var check = _routeManagementService.GetAllOptionsWithBoxSizes().Select(x => new OptionDataViewModel
{
      Id = x.Id,
      BoxSizeId = x.BoxSizeId,
      Name = x.Name,
      OptionCode = x.OptionCode,
      BoxSize = x.BoxSize,
      Time = x.Time
 }).OrderBy(x => x.OptionCode).ThenBy(x => x.BoxSize).ToList();
var check = _routeManagementService.GetAllOptionsWithBoxSizes().Select(x => new OptionDataViewModel
{
     Id = x.Id,
     BoxSizeId = x.BoxSizeId,
     Name = x.Name,
     OptionCode = x.OptionCode,
     BoxSize = x.BoxSize,
     Time = x.Time
}).OrderBy(x => x.OptionCode)
  .ThenBy(x => x.BoxSize.StartsWith("W"))
  .ThenBy(x => x.BoxSize).ToList();
在任何一种情况下,初始选项“代码排序”都会起作用,但它仍然会先显示包含F的框大小,然后再显示包含W的框大小。我如何编写此linq查询,以便以我想要的方式正确排序列表


感谢您的任何建议或意见

你试过降序法吗?
。然后(x=>!x.BoxSize.StartsWith(“W”)
(或@Ivan San的解决方案)
false
true
之前排序@mjwills有效!奇怪的是,它是这样工作的。在阅读它时,看起来您试图按不以W开头的项进行排序?您需要考虑表达式的返回类型。它是布尔型的。现在问问你自己——布尔人是如何分类的?回答-
false
然后
true
.Hm。这样说很有道理。非常感谢。你试过降序法吗?
。然后(x=>!x.BoxSize.StartsWith(“W”)
(或@Ivan San的解决方案)
false
true
之前排序@mjwills有效!奇怪的是,它是这样工作的。在阅读它时,看起来您试图按不以W开头的项进行排序?您需要考虑表达式的返回类型。它是布尔型的。现在问问你自己——布尔人是如何分类的?回答-
false
然后
true
.Hm。这样说很有道理。非常感谢。