14

可能重复:
动态 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);
4

3 回答 3

8

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

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

不过,无论如何我都不会认为这是最好的解决方案。这对您是否真的有意义取决于您从哪里获得属性名称(如果您也从反射中获得它)以及有多少属性。

于 2012-05-22T12:33:37.570 回答
5

这应该这样做

queryResults = queryResults.OrderBy(r => sort == "Title" ? r.Title : r.LastName)
于 2012-05-22T12:35:18.540 回答
4

您可以使用DynamcLinq。我已经一年多没有碰它了,但我得到了预期的结果。您的代码将更改为:

queryResults = queryResults.OrderBy(sort);

哦,酷,它也是一个NuGet 包

于 2012-05-22T12:41:00.313 回答