避免切换案例-linq

时间:2012-05-22 12:28:43

标签: c# .net 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);

3 个答案:

答案 0 :(得分:8)

如果你想完全动态地做这件事,你可以使用一些反思(简单的例子):

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

在任何情况下,我都不认为这是最好的解决方案。这对你来说真的有意义取决于你从哪里获得属性名称(如果你从反射中得到它,或者没有)以及有多少属性。

答案 1 :(得分:5)

这应该这样做

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

答案 2 :(得分:4)

您可以使用DynamcLinq。我在一年多的时间内没有触及它,但我有预期的结果。您的代码将更改为:

queryResults = queryResults.OrderBy(sort);

哦,很酷,它也是NuGet package too