如何修复“类型中没有属性或字段”错误?

时间:2016-09-11 06:39:06

标签: c# asp.net-mvc entity-framework linq dynamic-linq

我在尝试排序不在Order表中的任何列时遇到此错误,如果我使用OrderBy("Customer.CompanyName" + " " + sortDir)错误将会消失,但所有列都将无法排序。下面使用的OrderBy方法来自here

问题的原因是什么?

    public ActionResult WebGrid(int page = 1, int rowsPerPage = 10, string sortCol = "OrderID", string sortDir = "ASC")
    {
        List<Order> res;
        using (var nwd = new NorthwindEntities())
        {
             var _res = nwd.Orders
                .OrderBy(sortCol + " " + sortDir)
                .Select(o => new Order
                {
                    OrderID = o.OrderID,
                    OrderDate = o.OrderDate,
                    CompanyName = o.Customer.CompanyName,
                    FirstName = o.Employee.FirstName,
                    //......
                    //......
                    //......
                });

1 个答案:

答案 0 :(得分:4)

您提供链接的类标记为internal,并且无法在其定义的程序集之外使用,因此您无法在代码中使用它。

  

此API支持产品基础架构,但并非如此   直接从您的代码中使用。提供创建新功能   来自LinqDataSource控件中的值的类。

那么您实际尝试使用的是QueryableOrderBy,它是System.Linq的一部分,可以使用如下:

.OrderBy(x=> x.sortCol + " " + x.sortDir)

如果您尝试按两列排序,则可以使用:

.OrderBy(x=> x.sortCol).ThenBy(x=> x.sortDir)

如果要动态指定OrderBy表达式,可以为每个可能的参数执行switch语句,或者按照此SO Answer构建动态表达式树。