如何修复 'No property or field exists in type' 错误?

How to fix 'No property or field exists in type' error?

我在尝试对不在订单 table 中的任何列进行排序时遇到此错误,如果我使用 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,
                    //......
                    //......
                    //......
                });

您提供给 link 的 class 被标记为 internal 并且它不能在它定义的程序集之外使用,所以您不能使用它在你的代码中。

This API supports the product infrastructure and is not intended to be used directly from your code. Provides functionality to create new classes from values in a LinqDataSource control.

所以您实际尝试使用的是 Queryable class 中的 OrderBy,它是 System.Linq 的一部分,可以按如下方式使用:

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

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

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

如果你想动态指定 OrderBy 表达式,你可以为每个可能的参数做一个 switch 语句,或者按照这个 构建一个动态表达式树。