9

我试图弄清楚如何使用这个 orderBy 参数。我不确定我应该传入什么。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net- mvc-应用程序

   public virtual IEnumerable<TEntity> Get(
        Expression<Func<TEntity, bool>> filter = null,
        Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
        string includeProperties = "")
    {
        IQueryable<TEntity> query = dbSet;

        if (filter != null)
        {
            query = query.Where(filter);
        }

        foreach (var includeProperty in includeProperties.Split
            (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
        {
            query = query.Include(includeProperty);
        }

        if (orderBy != null)
        {
            return orderBy(query).ToList();
        }
        else
        {
            return query.ToList();
        }
    }
4

1 回答 1

17

如果您从 msdn 文章中阅读此内容

“代码 Func, IOrderedQueryable> orderBy 也意味着调用者将提供一个 lambda 表达式。但在这种情况下,表达式的输入是 TEntity 类型的 IQueryable 对象。表达式将返回该 IQueryable 对象的有序版本。对于例如,如果为 Student 实体类型实例化存储库,则调用方法中的代码可能会为 orderBy 参数指定 q => q.OrderBy(s => s.LastName)。”

它说,当您调用 Get 时,您应该提供一个 lambda 表达式,该表达式将是 IQueryable 上的 Func 或函数,提供 IOrderedQueryable。

因此,对于文章中使用的 Student 对象,您需要使用它。

var students = repository.Get(x => x.FirstName = "Bob",q => q.OrderBy(s => s.LastName));
于 2012-06-07T15:44:31.197 回答