Obtuve una matriz que contiene elementos del objeto 'Persona'
Necesito tener las personas especiales arriba (aquellas ordenadas por Id) y las personas no especiales abajo (aquellas ordenadas alfabéticamente). Debe tener un aspecto como este:
¿Hay alguna forma de ordenarlo así sin tener que dividir la lista, ordenarla individualmente y luego volver a fusionarla?
Primero puede OrderBy por Special (tenga en cuenta que false < true ) y luego puede usar la condición dentro de ThenBy de esta manera:
var result = persons .OrderBy(person => person.Special != "Yes") .ThenBy(person => person.Special == "Yes" ? person.Id : 0) .ThenBy(person => person.Special == "Yes" ? "" : person.Name);Una versión sin linq:
list.Sort((a, b) => { if (a.Special != b.Special) { return a.Special ? -1 : 1; } return a.Name.CompareTo(b.Name); });