Esa es una extraña a querer.
Puede pasar cualquier Func < TSource, TKey > te gusta en OrdenarPor: -
names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0
? x.FirstName
: x.LastName);
O si cree que el ternario en línea se ve feo (o si es necesario volver a utilizar el tipo de todo el lugar), usted puede escribir su propia IComparer: -
http://msdn.microsoft.com/en-us/library/bb549422.aspx
class PersonFirstOrLastNameComparer : IComparer<Person>
{
public int Compare(Person x, Person y)
{
return GetKey(x).CompareTo(GetKey(y));
}
private String GetKey(Person person)
{
if (person.FirstName.CompareTo(person.LastName) < 0)
{
return person.FirstName;
}
else
{
return person.LastName;
}
}
}
y: -
names.OrderBy(x => x, new PersonFirstOrLastNameComparer());
Realmente sin embargo, yo le aconsejaría en contra de ella. Si te encuentras clasificando por la primera de dos propiedades en una clase de modelo, sospecho que es probable que tu clase de modelo no esté a la altura de la tarea.
No puedo decir más sin saber más acerca de su aplicación específica, pero probablemente aconsejaría encapsular esa lógica dentro de la clase de modelo (ya sea proporcionando una propiedad específica, por ejemplo, Person.SortKey o si es una clasificación universal por reemplazando a CompareTo) o creando un modelo de vista. Los fragmentos de código que publiqué generarían una gran sorpresa en una revisión del código. Creo que mantener la lógica con el modelo (o ViewModel) aclararía el propósito.
¿En qué se diferencia la clasificación por "propiedades múltiples al mismo tiempo" de una propiedad y luego por otra? – LBushkin
Me parece que el OP desea ordenar por el valor de clasificación más antiguo de dos propiedades. – cdhowie
¿Cómo se clasifica 'Adam Jones' y' Jones Adam'? ¿en qué orden? –