РЕДАКТИРОВАТЬ: до сих пор неясно, что это за вопрос, но похоже, что мы имеем дело с коллекциями в памяти, а не с LINQ to SQL и т. Д.
Если проблема с использованием OrderBy
заключается в том, что он не сортирует список на месте, вы должны использовать List<T>.Sort()
, возможно передавая пользовательский компаратор.
Мой MiscUtil проект имеет несколько типов помощников, которые могут вам помочь. Например:
var comparison = ProjectionComparer<ModelType>.Create(m => m.SomeProperty)
.ThenBy(m => m.SomeOtherProperty);
list.Sort(comparison);
Если вы используете LINQ to SQL и у вас есть контекст данных , вы можете использовать:
public List<TSource, TKey> OrderThisList<TSource, TKey>(
Expression<Func<TSource, TKey>> ordering)
{
return dataContext.GetTable<TSource>()
.OrderBy(ordering)
.ToList();
}
Теперь очевидно, что требуется два аргумента типа , и вы хотите указать только один. Есть несколько способов обойти это - в основном вы хотите получить универсальный тип и метод с одним аргументом типа (TKey
), который может быть выведен. Например:
var list = Orderer<ModelType>.Create(dataContext)
.OrderThisList(m => m.SomeProperty);
Это несколько обходно, хотя, учитывая, что OrderBy
уже доступен ... не могли бы вы объяснить, почему вы этого хотите, а также какой поставщик LINQ участвует?