Допустим, у меня есть такая сущность, как:
public class Car
{
public string Make { get; set; }
public string Model { get; set; }
public DateTime ReleaseDate { get; set; }
public int NumCreated { get; set; }
}
Мы используем простую архитектуру MVP для нашего сайта с уровнем просмотра (сайт ASP.NET, уровень докладчика (библиотека классов C #), уровень логики(Библиотека классов C #), Уровень данных (Библиотека классов C #).
Допустим, у меня есть представление, отображающее список автомобилей с сортируемыми заголовками столбцов. В прошлом я делал все своисортировка в моем логическом слое, и представление, передающее перечисление для любого столбца, по которому должен быть отсортирован список сущностей.
Это боль, потому что мне нужно поддерживать перечисление для каждой сущности, которую я имею, изапись в этом перечислении для каждого свойства в сущности.
Так, например, мы будем делать что-то вроде:
CarLogic.cs
public IEnumerable<Car> GetCarsByYear(string year, SortColumn sortColumn, SortOrder sortOrder)
{
List<Car> cars = _carRepository.GetCarsByYear(year);
switch (sortColumn)
{
case SortColumn.Make:
cars.Sort((car1, car2) =>
sortOrder == SortOrder.Ascending
? car1.Make.CompareTo(car2.Make) :
car2.Make.CompareTo(car1.Make);
break;
case SortColumn.Model:
cars.Sort((car1, car2) =>
sortOrder == SortOrder.Ascending
? car1.Model.CompareTo(car2.Model) :
car2.Model.CompareTo(car1.Model);
break;
case SortColumn.ReleaseDate:
cars.Sort((car1, car2) =>
sortOrder == SortOrder.Ascending
? car1.ReleaseDate.CompareTo(car2.ReleaseDate) :
car2.ReleaseDate.CompareTo(car1.ReleaseDate);
break;
case SortColumn.NumCreated:
cars.Sort((car1, car2) =>
sortOrder == SortOrder.Ascending
? car1.NumCreated.CompareTo(car2.NumCreated) :
car2.NumCreated.CompareTo(car1.NumCreated);
break;
// ...
}
return cars;
}
Вот какЯ делал это. Однако это очень ручной процесс, и если у объекта есть довольно много свойств, это может раздражать.
Что может быть лучше для этого? Можно ли разрешить моемуколлекция энтМожно ли сортировать свойства без необходимости делать все вручную для каждого свойства, как это?