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 は、呼び出し元がラムダ式を提供することも意味します。ただし、この場合、式への入力は TEntity 型の IQueryable オブジェクトです。式は、その IQueryable オブジェクトの順序付きバージョンを返します。たとえば、リポジトリが Student エンティティ タイプに対してインスタンス化されている場合、呼び出し元のメソッドのコードは、orderBy パラメーターに q => q.OrderBy(s => s.LastName) を指定する可能性があります。

Get を呼び出すときは、IOrderedQueryable を提供する IQueryable の Func または関数になるラムダ式を提供する必要があります。

したがって、記事で使用されている Student オブジェクトについては、dite を使用します。

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