orderbydescending ordenar multiple lista descending columns ascending asc c# asp.net linq order

ordenar - order by linq c# multiple columns



Linq Ordena primero un número específico y luego muestra todo el resto en orden (4)

Si tengo una lista de números:

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

y quiero ordenar por un número específico y luego mostrar el resto. Por ejemplo, si elijo ''3'', la lista debería ser:

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

Buscando linq y c #. Gracias


Tal vez algo como esto:

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));


Un par de respuestas ya ordena los últimos números (lo cual puede ser correcto ya que solo muestra una lista ya ordenada). Si desea que los números "no seleccionados" se muestren en su orden original, no necesariamente ordenada en lugar de ordenada, puede hacerlo;

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

Como señala @DuaneTheriot, el método de extensión de IEnumerable OrderBy hace una clasificación estable y no cambiará el orden de los elementos que tienen una clave igual. En otras palabras;

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

funciona igual de bien para ordenar 3 primero y mantener el orden de todos los demás elementos.


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


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);