Вы могли бы использовать отражение, но это было бы довольно медленно. Наиболее эффективным было бы объявить делегата для использования в сортировке и назначить функцию в зависимости от строки:
Func<Employee,string> order;
switch (field) {
case "FirstName": order = x => x.FristName;
case "LastName": order = x => x.LastName;
}
Для направления я думаю, что лучше просто использовать отдельные коды:
var list = _employeeService.List();
IEnumerable<employee> sorted;
if (direction == "ascending") {
sorted = list.OrderBy(order);
} else {
sorted = list.OrderByDescending(order);
}
_model.List = sorted.ToList<Employee>();