2012-05-22 5 views
14

Можно создать дубликат:
Dynamic LINQ OrderByИзбегайте переключатель случай -linq

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); 
+0

Вы можете найти ответ на этот вопрос: http://stackoverflow.com/questions/41244/dynamic-linq -orderby –

+0

Предоставленные решения не будут работать для большинства провайдеров linq, см. мое решение: http://stackoverflow.com/a/21936366/775114 –

ответ

8

Если вы хотите, чтобы сделать это полностью динамический, вы могли бы использовать некоторые отражения (простой пример):

string prop = "Title"; 
var q = queryResults.OrderBy(x => x.GetType().GetProperty(prop).GetValue(x, null)); 

Я не считаю, что это самое приятное решение в любом случае. Независимо от того, действительно ли это имеет смысл для вас, зависит от того, откуда вы получаете имя свойства (если вы получаете его от отражения или нет) и сколько у него свойств.

5

Это должно сделать это

queryResults = queryResults.OrderBy(r => sort == "Title" ? r.Title : r.LastName) 
4

Вы можете использовать DynamcLinq. Я не трогал его больше года, но ожидаемые результаты у меня были. Код меняется на:

queryResults = queryResults.OrderBy(sort);

О, круто, это также NuGet package too

Смежные вопросы