Linq先按特定的数字sorting,然后依次显示所有的rest

如果我有一个数字列表:

1,2,3,4,5,6,7,8 

我想以一个特定的数字来订购,然后显示其余的。 例如,如果我select“3”,列表应该是:

 3,1,2,4,5,6,7,8 

寻找linq和C#。 谢谢

 list.OrderByDescending(i => i == 3).ThenBy(i => i); 

也许这样的事情:

 List<int> ls=new List<int>{1,2,3,4,5,6,7,8}; int nbr=3; var result= ls.OrderBy (l =>(l==nbr?int.MinValue:l)); 

一些答案已经sorting了最后的几个数字(这可能是正确的,因为你只显示一个已经sorting的列表)。 如果你希望“未被选中”的数字以原始的,不一定sorting的顺序而不是sorting的,你可以做;

 int num = 3; var result = list.Where(x => x == num).Concat(list.Where(x => x != num)); 

正如@DuaneTheriot指出的那样, IEnumerable的扩展方法OrderBy进行稳定的sorting,不会改变具有相同键的元素的顺序。 换一种说法;

 var result = list.OrderBy(x => x != 3); 

也可以先sorting3,并保持所有其他元素的顺序。

 public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f) { foreach ( var item in items.Where(f)) yield return item; foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i)) yield return item; } var items = new [] {1, 4, 2, 5, 3}; items.TakeAndOrder(i=> i == 4);