关于c#:避免切换case -linq

Avoid switch case -linq

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Dynamic LINQ OrderBy

1
2
3
4
5
6
7
  switch (sort) {
                case"Title":
                    queryResults = queryResults.OrderBy(r => r.Title);
                    break;
                default:
                    queryResults = queryResults.OrderBy(r => r.LastName);
                    break;

我有什么办法可以摆脱上面的开关块吗?

我能做些什么吗?

1
2
3
queryResults = queryResults.OrderBy(r => r."sort");
or
queryResults = queryResults.OrderBy(r => r.sort);


如果您想完全动态地进行此操作,可以使用一些反射(简单示例):

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

不过,我不认为这是最好的解决办法。这对您来说是否真的有意义取决于您从哪里获得属性名(如果您也从反射中获得,或者不从反射中获得),以及有多少属性。


应该这样做

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


你可以用Dynamclinq。我已经一年多没有碰过了,但我有了预期的结果。您的代码将更改为:

queryResults = queryResults.OrderBy(sort);

哦,太酷了,这也是个裸体套餐