Избегайте случая переключения -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