Я согласен с идеей базового класса, так как при этом будет сохранен весь дублирующий код. Одна вещь, которую я сделал, которая делает шаг в этом направлении, - это создание класса для обработки сортировки любого общего списка (для DTO / POCO). Это позволило мне отсортировать список в моем докладчике или коде только с 1 строкой кода.
Обычно для SortExpression я возвращаю имя свойства DTO, по которому вы хотите отсортировать. Кроме того, SortDirection будет простым «По возрастанию» или «По убыванию»
List<Supplier> SupplierList = mSupplierService.GetSuppliers();
SupplierList.Sort(new GenericComparer<Supplier>(mView.SortExpression, mView.SortDirection));
mView.Suppliers = SupplierList;
Вот класс, который я использовал
public class GenericComparer<T> : IComparer<T>
{
private string mDirection;
private string mExpression;
public GenericComparer(string Expression, string Direction)
{
mExpression = Expression;
mDirection = Direction;
}
public int Compare(T x, T y)
{
PropertyInfo propertyInfo = typeof(T).GetProperty(mExpression);
IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
if (mDirection == "Ascending") {
return obj1.CompareTo(obj2);
}
else {
return obj2.CompareTo(obj1);
}
}
}