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

时间:2016-02-10 09:08:03

标签: entity-framework linq rest webforms asp.net-4.5

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

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

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

但是,在服务器端(在我的ASP.NET WebAPI REST服务中),我在使用EF 6.1.3从数据库表中获取数据时遇到了问题。

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;
}

在编译时出现问题,当我收到此编译器错误时:

  

无法从用法推断出方法'System.Linq.Queryable.OrderBy(System.Linq.IQueryable,System.Linq.Expressions.Expression&gt;)'的类型参数。尝试明确指定类型参数。

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

1 个答案:

答案 0 :(得分:2)

正如评论中所提到的, System.LINQ OrderBy方法需要委托而不是字符串,因此错误。

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