Странно хотеть.
Вы можете передать любой Func , который вам нравится, в OrderBy: -
names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0
? x.FirstName
: x.LastName);
Или, если вы думаете, что встроенная троичная часть выглядит некрасиво (или если вам нужно повторно использовать сортировку повсеместно), вы можете написать свой собственный 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;
}
}
}
и: -
names.OrderBy(x => x, new PersonFirstOrLastNameComparer());
Правда, я бы советовал против этого. Если вы обнаружите, что сортируете по более раннему из двух свойств в классе модели, я подозреваю, что, скорее всего, ваш класс модели не соответствует задаче.
Я не могу сказать больше, не зная больше о вашем конкретном приложении, но, вероятно, я бы посоветовал либо инкапсулировать эту логику в классе модели (либо предоставив конкретное свойство, например Person.SortKey, либо если это универсальная сортировка путем переопределения CompareTo) или создание модели представления. Фрагменты кода, которые я разместил, были бы немного удивительными в обзоре кода. Я думаю, что сохранение логики с моделью (или ViewModel) прояснит цель.