C'est une position bizarre de vouloir.
Vous pouvez passer toute Func < TSource, TKey > vous aimez dans OrderBy: -
names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0
? x.FirstName
: x.LastName);
Ou si vous pensez que le ternaire en ligne semble laid (ou si vous avez besoin de réutiliser le genre partout l'endroit), vous pouvez écrire votre propre 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;
}
}
}
et: -
names.OrderBy(x => x, new PersonFirstOrLastNameComparer());
Vraiment bien, je vous le déconseille. Si vous vous trouvez trier par le plus tôt de deux propriétés sur une classe de modèle, je soupçonne qu'il est probable que votre classe de modèle n'est pas à la hauteur de la tâche. Je ne peux pas en dire plus sans en savoir plus sur votre application spécifique, mais je conseillerais probablement soit d'encapsuler cette logique dans la classe du modèle (soit en fournissant une propriété spécifique, par exemple Person.SortKey ou si c'est un tri universel par CompareTo) ou créer un modèle de vue. Les extraits de code que j'ai postés seraient un peu à la hausse dans une révision de code. Je pense que garder la logique avec le modèle (ou ViewModel) permettrait de clarifier le but.
Comment le tri par "propriétés multiples en même temps" est-il différent du tri d'une propriété et d'une autre? – LBushkin
Il me semble que l'OP veut trier par la première valeur de tri de deux propriétés. – cdhowie
Comment trier Adam Jones et Jones Adam? dans quel ordre? –