我有一个包含2个属性(id和letter)的对象列表.这些对象(a,b,c和d)可以有4个不同的字母值.当我对这些对象进行排序时,首先我要按字母排序.然后我想按id排序.当我按字母排序时,我希望订单是a,b,d,c.我无法获得此自定义排序.使用linq时,我试过这样的事情:
ListOfObjects.OrderBy(t => t.letter).ThenBy(t => t.letter.StartsWith("c") ? 2 : 1).ThenBy(t => t.id);
Run Code Online (Sandbox Code Playgroud)
我在这背后的想法是你可以简单地将字母以c开头的对象移动到列表的底部.但是,这似乎不起作用.你们有什么想法吗?任何帮助将不胜感激.
只需改变前两个条件:
ListOfObjects.OrderBy(t => t.letter.StartsWith("c") ? 2 : 1)
.ThenBy(t => t.letter)
.ThenBy(t => t.id);
Run Code Online (Sandbox Code Playgroud)
第一个条件将所有cS到终点,然后通过进行排序letter,然后通过id.
由于您的第一个条件已经排序letter,尝试根据字母再次排序没有任何影响.