【问题标题】:How to do dynamic orderby in LINQ? [duplicate]如何在 LINQ 中进行动态排序? [复制]
【发布时间】:2014-06-04 11:26:12
【问题描述】:

我正在尝试根据用户输入对数据进行排序。但是在 LINQ 中不会执行 orderby 子句。我怎么做 ?? 这是我的代码...

 [HttpGet]
    public JsonResult SortData(String colName , String sortorder)
    {
        using( EmployeeDB db = new EmployeeDB( ) )
        {
            if( sortorder == "desc" )
            {
                var JsonData = new
                {
                    Data = (from emp in db.Employees
                            orderby colName descending
                            select new
                            {
                                EId = emp.EId ,
                                EmployeeName = emp.EmployeeName
                            }).ToList( )
                };
                return Json( JsonData , JsonRequestBehavior.AllowGet );
            }
            else
            {
                var JsonData = new
                {
                    Data = (from emp in db.Employees
                            orderby colName
                            select new
                            {
                                EId = emp.EId ,
                                EmployeeName = emp.EmployeeName
                            }).ToList( )
                };
                return Json( JsonData , JsonRequestBehavior.AllowGet );
            }
        }
    }

【问题讨论】:

    标签: c# asp.net asp.net-mvc linq lambda


    【解决方案1】:

    你必须做这样的事情才能让它工作:

    var colName= "EmployeeName";
    
    var Column= typeof(Employee).GetProperty(colName);
    
    
    Data = (from emp in db.Employees
            select new
            {
             EId = emp.EId ,
             EmployeeName = emp.EmployeeName
            })
            .AsEnumerable()
            .OrderBy(emp => Column.GetValue(emp, null))
            .ToList();
    

    或:

     Data = (from emp in db.Employees
                select new
                {
                 EId = emp.EId ,
                 EmployeeName = emp.EmployeeName
                })
                .AsEnumerable()
                .OrderBy(i => i.GetType().GetProperty(colName).GetValue(i, null))
                .ToList();
    

    【讨论】:

    • @Eshan,你确定按对象排序可以吗?我也提出了同样的建议,但我很感兴趣。
    • 我没有测试过,但应该可以。
    • 我尝试了这两个代码......它工作正常...... :(
    • 我收到此错误。LINQ to Entities 无法识别方法 'System.Object GetValue(System.Object, System.Object[])' 方法,并且此方法无法转换为存储表达式。”
    • 更新了你做了什么?
    【解决方案2】:
    from emp in db.Employees
    orderby colName
    ...
    

    错了。 colName 对每个员工都是一样的。它必须类似于emp.EmployeeName

    我认为,在您的情况下,您最好尝试使用反射来获取特定员工特定列的实际值。像这样的:

    order by emp.GetType().GetProperty("colName").GetValue(emp, null)
    

    丑陋。当值未转换为实际类型时,不确定它是否会起作用。

    【讨论】:

    • No.. 它没有得到排序..
    猜你喜欢
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2016-10-29
    • 2012-10-01
    • 2013-05-09
    • 2015-02-25
    相关资源
    最近更新 更多