Поскольку у вас нет общего типа, к которому вы можете обращаться к свойствам строго типизированным способом, вы не можете использовать OrderBy
напрямую, как это предлагается в других ответах.
Вам нужно будет использовать отражение, чтобы получить ссылку на объект свойства и попросить его извлечь свое значение для каждого элемента в последовательности:
public static IOrderedEnumerable<TSource> OrderByProperty<TSource>(
this IEnumerable<TSource> source,
string propertyName)
{
var property = typeof(TSource).GetProperty(propertyName);
return source.OrderBy(item => (string) property.GetValue(item, null));
}
Конечно, если во время выполнения вы знаете поля и точного типа списка для сортировки, вы должны вместо этого использовать строго типизированную перегрузку OrderBy
. Это предложение только в том случае, если вы не знаете, какие элементы в списке сортировать (т. Е. IEnumerable<object>
).