Foo().OrderBy(x=> x.Name)
¿Qué pasa si quiero que la colección se ordene de esa manera, pero exactamente un elemento con Id == (digamos 314) siempre debe estar al principio, independientemente de su nombre.Linq - advanced .OrderBy
Foo().OrderBy(x=> x.Name)
¿Qué pasa si quiero que la colección se ordene de esa manera, pero exactamente un elemento con Id == (digamos 314) siempre debe estar al principio, independientemente de su nombre.Linq - advanced .OrderBy
Puede clasificar en dos rondas:
Foo().OrderBy(x => x.Id == 314 ? 0 : 1).ThenBy(x => x.Name)
Tal vez esto es aún más simple (suponiendo booleano false lucían antes booleano verdadero)
Foo().OrderBy(x => x.Id != 314).ThenBy(x => x.Name)
Personalmente manejaría que después de la cliente, pero si desea una forma LINQ, entonces probablemente evitaría Concat
- será una consulta más compleja. Me gustaría ir para:
int id = 314;
var data = Foo().OrderBy(x => x.Id == id ? 0 : 1).ThenBy(x => x.Name)
Intente utilizar Union
:
var foo = Foo();
foo.Where(x => x.id == 314).Union(foo.OrderBy(x => x.Name));
Según MSDN (ver enlace arriba), esta es una solución mejor que cualquier cosa que implique 'Concat' porque' Concat' permite duplicados. –
'Single' devuelve un solo objeto; no puede llamar a' Union' en eso. –
Esto invocaría a Foo() dos veces, lo que no siempre es una gran idea. – jishi
falsas tipo de Boole antes de verdad. ILSpy muestra que 'Boolean.CompareTo' devuelve 0 si los valores son iguales, -1 si' this' es falso, de lo contrario 1. – user7116
¡Es bueno saberlo! gracias. – jishi