Gridview 排序 - 从 Entity Framework 中获取按任意排序表达式排序的数据

Gridview sorting - fetching data sorted by arbitrary sort expression from Entity Framework

我有一个 ASP.NET 4.5 webforms 应用程序,它基于一组 ASP.NET WebAPI REST 服务,为页面提供数据,我正在使用 strongly-typed 数据控件和 webforms 数据绑定来简化我的代码。

在我的 ASPX 页面上,我想显示一个网格并允许用户通过单击列 headers 对显示的数据进行排序。我无法让排序正常工作。 ASPX 方面工作正常 - 我向我的 GetMethod 添加了一个 string sortExpression 参数并且它被正确填充(使用 TitleTitle DESC 如果我点击 Title列),具有按列定义的配置排序表达式。

public List<MyBasicDto> GetData(string sortByExpression, int startRowIndex, int maximumRows, out int totalRowCount)
{
    return _client.GetMyData(sortByExpression, startRowIndex, maximumRows, out totalRowCount);
}

但是,在 server-side(在我的 ASP.NET WebAPI REST 服务中),我无法使用 EF 6.1.3 从我的数据库 table 获取数据。

public List<MyBasicDto> GetBasicDto(string sortby, int startrow, int maxrows)
{
    try
    {
        int skip = startrow > 0 ? startrow - 1 : 0;

        string sortExpression = sortby ?? "DateEntered DESC";

        List<MyEntity> entities = _dbContext.MyEntity.OrderBy(sortExpression).Skip(skip).Take(maxrows).ToList();

        List<MyBasicDto> results = Mapper.Map<List<MyEntity>, List<MyBasicDto>>(entities);
        return results;
    }
    catch (Exception exc)
    {
        Log.Fatal("GetBasicDto - Exception", exc);
    }

    return null;
}

问题发生在编译时,当我得到这个编译器错误时:

The type arguments for method 'System.Linq.Queryable.OrderBy(System.Linq.IQueryable, System.Linq.Expressions.Expression>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

???我在网上找到的所有示例似乎都是这样工作的——将排序表达式作为字符串提供给 .OrderBy() Linq 方法——我的代码有什么问题?这个错误到底是什么意思(对我来说听起来很神秘)?

如评论中所述,System.LINQ OrderBy 方法需要委托而不是字符串,因此会出现错误。

您将必须使用 Dynamic Linq,如 ScottGu's Blog 中所示。