C# 使用LINQ在OrderBy中自定义排序逻辑
如果我希望以下划线“\u1”开头的项目位于列表底部,那么对字符串列表进行排序的正确方法是什么,否则所有内容都是按字母顺序排列的 现在我在做这样的事情C# 使用LINQ在OrderBy中自定义排序逻辑,c#,.net,linq,sorting,sql-order-by,C#,.net,Linq,Sorting,Sql Order By,如果我希望以下划线“\u1”开头的项目位于列表底部,那么对字符串列表进行排序的正确方法是什么,否则所有内容都是按字母顺序排列的 现在我在做这样的事情 autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a ) 我认为您需要使用并指定自己的实现自定义逻辑的方法。使用OrderBy重载,该重载接受一个IComparer,第一个Func参数将提供给比较器,然后您需要从那里比较字符串。首先处理一个或两个的情况从\uu开始,然后您可能需要从
autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
我认为您需要使用并指定自己的实现自定义逻辑的方法。使用OrderBy重载,该重载接受一个
IComparer
,第一个Func
参数将提供给比较器,然后您需要从那里比较字符串。首先处理一个或两个的情况从\uu
开始,然后您可能需要从那里剥离\u
并只使用标准字符串。比较将它们排序到第一个\u
之外如果您想要自定义排序,但不想提供比较器,您可以使用-sql样式:
autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
然而,老实说,虽然从技术上讲,你的方法是一种黑客攻击,可能会失败,但它更简单,更容易理解你的意图。我更喜欢这个解决方案。我总是把那件事忘得一干二净。