private IOrderedEnumerable <TEntity> ApplySorting(IEnumerable <TEntity> listWithMofifiersApplied) { var sortByFirstCriterion = SortModifiers.First(); IOrderedEnumerable <TEntity> sortedList; if (sortByFirstCriterion.Asc) { sortedList = listWithMofifiersApplied.OrderBy(sortByFirstCriterion.SortByExpression); } else { sortedList = listWithMofifiersApplied.OrderByDescending(sortByFirstCriterion.SortByExpression); } var sortByAddtionalCriteria = SortModifiers.Skip(1); // Sort by more than one column => loop trough all the rest columns foreach (var sortMod in sortByAddtionalCriteria) { if (sortMod.Asc) { sortedList = sortedList.ThenBy(sortMod.SortByExpression); } else { sortedList = sortedList.ThenByDescending(sortMod.SortByExpression); } } return(sortedList); }