【问题标题】:How to fix 'No property or field exists in type' error?如何修复“类型中不存在属性或字段”错误?
【发布时间】:2016-09-11 17:59:08
【问题描述】:

我在尝试对 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,
                    //......
                    //......
                    //......
                });

【问题讨论】:

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


    【解决方案1】:

    您提供链接的类被标记为internal,它不能在定义它的程序集之外使用,因此您不能在代码中使用它。

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

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

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

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

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

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

    【讨论】:

    • 感谢您的帮助,但我无法在动态 linq 下使用 ThenBy。
    • 感谢您的帮助!我发现我可以使用 else if 语句来实现这一点。
    猜你喜欢
    • 2018-09-27
    • 2016-07-28
    • 2019-07-08
    • 2021-11-12
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多