c# - 如何构造动态 LINQ to Entities ORDER BY 子句?

标签 c# asp.net-mvc linq-to-entities dynamic-programming asp.net-web-api

我知道如何构造 WHERE 子句,但由于某种原因我无法构造 order by 子句。

IQueryable<ShowList> query = from s in db.ShowList select s;

if (title != null)
{
    query = query.Where(s => s.Title == title);
}

这就是事情不对劲的地方。我为用户提供了选择他们想要排序的列以及他/她想要 DESC 还是 ASC 的选项。我认为我在 OrderBy () 内部做错了什么。

“orderBy”变量是来自用户的输入,“order”变量也是来自用户的输入。

“orderBy”应该是列名称,“order”将为“desc”或“asc”

if (orderBy != null && order != null)
            {
                switch (order)
                {
                    case "asc":
                        query = query.OrderBy(s => orderBy);
                        break;
                    case "desc":
                        query = query.OrderByDescending(s => orderBy);
                        break;
                    default:
                        query = query.OrderBy(s => orderBy);
                        break;
                }
            }

return query.ToList();

谁能告诉我我做错了什么?

最佳答案

OrderBy 的参数方法为 LINQ 提供用于对查询结果进行排序的键。所以基本上你当前正在做的是说对于 orderBy 中包含的所有实体字符串应该用作 key 。因此没有执行真正的排序。

但是最有可能 orderBy指定应用于排序的属性的名称。如果您不想/不需要使其变得太复杂,您可以使用另一个开关/案例:

Func<ShowList, Object> orderByFunc = null;
switch (orderBy)
{
    case "Property1":
        orderByFunc = sl => sl.Property1;
        break;
    case "Property2":
        orderByFunc = sl => sl.Property2;
        break;
    // so on
    default:
        orderByFunc = sl => sl.Property1;
        break;
}

然后,在实际应用排序时:

case "asc":
    query = query.OrderBy(orderByFunc).AsQueryable();
    break;
case "desc":
    query = query.OrderByDescending(orderByFunc).AsQueryable();
    break;

关于c# - 如何构造动态 LINQ to Entities ORDER BY 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17029440/

相关文章:

c# - 在 C# 中使用数组实例化 IEnumerable<IEnumerable<T>>

asp.net-mvc - 测试 RedirectToAction 的最佳方法是什么?

c# - EF ctx.Object.Select 和 obj.Select 之间的区别

c# - 四舍五入小数值

c# - 如何从 C# 编辑或取消保护 protected Excel 工作表中的单个单元格?

c# - 什么是有效的 Entity Framework 查询来检查用户是否是 friend ?

SQL 到 Entity Framework 计数分组

c# - 使用 SQL LIKE 运算符的 LINQ to Entities

c# - 引用类型 '' 声称它在 'System.Web' 中定义,但找不到

c# - 从西里尔字母到拉丁字母的音译