在OrderBy中使用LINQ自定义sorting逻辑

什么是正确的方式来sortingstring的列表,我希望项目以下划线'_'开头,在列表的底部,否则一切都按字母顺序排列。

现在我正在做这样的事情,

autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a ) 

如果你想自定义sorting,但不想提供一个比较器,你可以拥有它 – SQL风格:

 autoList .OrderBy(a => a.StartsWith("_") ? 2 : 1 ) .ThenBy(a => a); 

我认为你需要使用OrderBy(Func<>, IComparer<>)并指定你自己的比较器,它将实现你的定制逻辑。

使用带有IComparer的OrderBy的重载,第一个Func参数将提供比较器,从那里你需要比较string。 首先处理一个或两个以_开始的情况,然后从那里你可能需要string.Compare _并只使用标准的string.Compare来sorting它们超出第一个_