Избегайте случая переключения -linq
Возможный дубликат:
Dynamic LINQ OrderBy
switch (sort) {
case "Title":
queryResults = queryResults.OrderBy(r => r.Title);
break;
default:
queryResults = queryResults.OrderBy(r => r.LastName);
break;
Есть ли способ избавиться от блока переключателей выше?
Могу ли я сделать что-то вроде:
queryResults = queryResults.OrderBy(r => r."sort");
or
queryResults = queryResults.OrderBy(r => r.sort);
Ответы
Ответ 1
Если вы хотите сделать это полностью динамичным, вы можете использовать некоторое отражение (простой пример):
string prop = "Title";
var q = queryResults.OrderBy(x => x.GetType().GetProperty(prop).GetValue(x, null));
Я бы не подумал, что это самое приятное решение в любом случае. Независимо от того, действительно ли это имеет смысл для вас, зависит от того, откуда вы получаете имя свойства (если вы получаете его от отражения или нет) и сколько у него свойств.
Ответ 2
Это должно сделать это
queryResults = queryResults.OrderBy(r => sort == "Title" ? r.Title : r.LastName)
Ответ 3
Вы можете использовать DynamcLinq. Я не трогал его больше года, но ожидаемые результаты у меня были. Ваш код изменится на:
queryResults = queryResults.OrderBy(sort);
О, круто, это также пакет NuGet