Linq Generic OrderBy选择器

时间:2010-12-16 19:14:42

标签: entity-framework-4 pagination asp.net-mvc-3

我在asp.net mvc应用程序(v3)和EntityFramework(v4)中使用存储库模式。 我想添加到存储库分页功能。我有以下示例代码:

public PagedResult<T> GetPaged(int offset = 0, int limit = PagedResult<T>.NoLimit, Expression<Func<T, bool>> predicate = null) 
    {      
      var res = BaseQ.Where(_predicate);//.Skip(offset);
      if (predicate != null)
        res = res.Where(predicate);

      res = res.Skip(offset);

      if (limit != PagedResult<T>.NoLimit)
      {
        res = res.Take(limit);
      }

      return new PagedResult<T>(res, res.Count(), offset, limit);
    }

但是,这不起作用,因为Entity框架会抛出一个异常,我应该在OrderBy之前调用Skip。 我想知道如何以通用方式实现它,以便从外部插入表达式。然后我会将其作为参数传递。 也许还有另一种解决这个问题的方法。

[编辑] 我发现这可以通过传入属性的名称并创建一个表达式来完成,但我想实际上只是使用它,因为我正在使用它在OrderBy中。所以请传递(c=>c.ID)例如。

提前感谢任何想法

1 个答案:

答案 0 :(得分:0)

我已决定传入一个字符串并从中创建表达式