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

标签 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,
                    //......
                    //......
                    //......
                });

最佳答案

您提供链接的类被标记为 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.

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

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

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

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

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

关于c# - 如何修复 'No property or field exists in type' 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433506/

相关文章:

需要 C# 简单 DataSocket 示例

c# - 如何在 C# 中使用 .cshtml 和其他文件类型作为字符串来构建开发人员文档

c# - 在 Entity Framework 中存储自定义对象列表

c# - MigrationHistory 表中的模型列是什么?

c# - 无法使用 Entity Framework 5 从数据库中读取

c# - 将实体映射到 DTO,无需重复代码

c# - Template10:AppBarButton:带有 TextBox 的内容不允许用户输入空格

c# - 为什么在 lambda 表达式中调用委托(delegate)函数时会保留参数 i ?

c# - 扩展器控件可能无法在 PreRender 之前注册

c# - 如何在 <%= %> 中打印文本?