cześć
Mam taki kod:
public enum SortingOption
{
AZ,
ZA,
PriceDescending,
PriceAscending
}
i teraz chciałbym na podstawie tego enuma pozyskać odpowiednią funkcję sortującą, czyli coś w tym stylu:
private Func<Product, string> GetSortingFunc(SortingOption sortingOption)
{
switch (sortingOption)
{
case SortingOption.AZ:
return product => product.Name;
case SortingOption.ZA:
break;
case SortingOption.PriceDescending:
return product => product.Price;
case SortingOption.PriceAscending:
break;
default:
break;
}
}
Tutaj pojawia się problem taki, że sortowanie po cenie wymaga Func z typem decimal, a po nazwie z typem string... Kolejny problem to rozróżnienie sortowania rosnąco i malejąco - musiałbym zwracać metodę Linq OrderBy lub OrderByDescending ale jak to zrobić zeby zwracać cos w stylu OrderByDescending(product => product.Price? Ostatecznie miałoby to wyglądać tak:
private ???? GetSortingFunc(SortingOption sortingOption)
{
switch (sortingOption)
{
case SortingOption.AZ:
return OrderBy(product => product.Name);
case SortingOption.ZA:
return OrderByDescending(product => product.Name);
case SortingOption.PriceDescending:
return OrderBy(product => product.Price);
case SortingOption.PriceAscending:
return OrderByDescending(product => product.Price);
default:
break;
}
}