4

我正在用 NHibernate 构建一个存储库框架。我的部分要求包括限制返回的结果数量或强制分页。为了让 NHibernate 成功解析来自 IQueryable 表达式的查询,它必须在任何 .Skip().Take() 操作之前执行 OrderBy 或 OrderByDescending 操作。

这就是我当前签名的调用方式。

var actualExerciseJournals = repo.GetAll( pageIndex: pageNum++, recordsPerPage: 250, orderByFirst: exerciseJournal => exerciseJournal.JOURNALDATE, orderBySecond: exerciseJournal => exerciseJournal.MEMBERID);

这是接口签名。

IEnumerable<TEntity> GetAll(int pageIndex, int recordsPerPage, Expression<Func<TEntity, object>> orderByFirst, Expression<Func<TEntity, object>> orderBySecond, Expression<Func<TEntity, object>> orderByThird, Expression<Func<TEntity, object>> orderByFourth, params Expression<Func<TEntity, object>>[] include);

(包含参数与问题无关)

是否有可能有一个签名可以接受这样的参数作为参数?

var actualExerciseJournals = repo.GetAll(pageIndex: 0, recordsPerPage: 250, collectionToOrder => collectionToOrder.OrderBy(x => x.JOURNALDATE).ThenBy(y => y.MEMBERID));

然后我将能够在我的存储库中应用这个表达式,并且我将不再对 orderbys 的数量有任何限制,或者它是否是 orderbydescending 或其他。

谢谢

4

1 回答 1

3

The lambda expression is just a function. So you should be able to use Func<IEnumerable<TEntity>,IEnumerable<TEntity>>. You are effectivly wanting to pass in a function that takes in an IEnumerable and give out a different IEnumerable.

于 2013-07-02T19:25:17.910 回答