如何在此MSDN示例中使用Order By

xiv*_*ivo 9 repository-pattern entity-framework-4.1 asp.net-mvc-3

我正在试图弄清楚如何使用这个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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Ric*_*est 15

如果你从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));
Run Code Online (Sandbox Code Playgroud)