避免开关大小写 -linq

本文关键字:-linq 大小写 开关 | 更新日期: 2023-09-27 18:34:52

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

避免开关大小写 -linq

如果你想完全动态地做到这一点,你可以使用一些反射(简单的例子(:

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

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

应该可以做到

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

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

queryResults = queryResults.OrderBy(sort);

哦,很酷,它也是一个NuGet包