This is a strange desire.
You can pass any Func <TSource, TKey> you like in OrderBy: -
names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0
? x.FirstName
: x.LastName);
Or, if you think the built-in triple version looks ugly (or if you need to reuse sorting all over the place), you can write your own 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;
}
}
}
and: -
names.OrderBy(x => x, new PersonFirstOrLastNameComparer());
, . , , , .
, , ( , Person.SortKey, , CompareTo) . , , - . , ( ViewModel) .