使用LINQ在OrderBy中自定义排序逻辑

时间:2010-06-09 15:47:11

标签: c# .net linq sorting sql-order-by

对于我想要以下划线“_”开头的项目的字符串列表排序的正确方法是在列表的底部,否则一切都是按字母顺序排列的。

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

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

3 个答案:

答案 0 :(得分:94)

如果你想要自定义排序,但又不想提供比较器,你可以拥有它--sql风格:

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

答案 1 :(得分:6)

我认为您需要使用OrderBy(Func<>, IComparer<>)并指定自己的Comparer来实现您的自定义逻辑。

答案 2 :(得分:2)

使用带有IComparer的OrderBy的重载,第一个Func参数将为比较器提供信息,然后需要比较字符串。首先处理一个或两个的情况从_开始,然后从那里你可能需要剥离_并使用标准string.Compare对它们进行排序超出第一个_ {1}}