Пример кода, на который ссылается Шив Кумар, не работает - он не компилируется, и даже после того, как вы разберетесь (как, например, реализуете дженерики во многих местах), он работает, но с ошибками, поскольку код вызывает collection.Move в некоторых случаях возникает исключение «Индекс должен находиться в границах списка».
Код ниже работает правильно. Кодировщики STE (Self Tracking Entities) должны были реализовать это сами ... Это правильный код:
public static class Extensions
{
public static void Sort<T>(this TrackableCollection<T> collection, Comparison<T> comparison)
{
var comparer = new Comparer<T>(comparison);
List<T> sorted = collection.OrderBy(x=>x, comparer) .ToList();
collection.Clear();
for (int i = 0; i < sorted.Count(); i++)
collection.Add(sorted[i]);
}
}
class Comparer<T> : IComparer<T>
{
private Comparison<T> comparison;
public Comparer(Comparison<T> comparison)
{
this.comparison = comparison;
}
public int Compare(T x, T y)
{
return comparison.Invoke(x, y);
}
}
Вы используете этот код как в предыдущем примере:
YourTrackableCollectionName.Sort((x, y) => x.YourFieldName.CompareTo(y.YourFieldName));