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

时间:2012-06-07 15:36:31

标签: asp.net-mvc-3 entity-framework-4.1 repository-pattern

我正在试图弄清楚如何使用这个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-application

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

1 个答案:

答案 0 :(得分:15)

如果您从msdn文章中读到这篇文章

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

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

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

var students = repository.Get(x => x.FirstName = "Bob",q => q.OrderBy(s => s.LastName));