是否可以将OrderBy表达式作为参数传递

本文关键字:参数传递 表达式 OrderBy 是否 | 更新日期: 2023-09-27 18:20:49

我正在用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);

(include论点与问题无关)

有可能有一个签名接受这样的东西作为参数吗?

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

然后,我就可以在我的存储库中应用这个表达式,并且我将不再对orderby的数量或是否为orderbydescending有任何限制。

感谢

是否可以将OrderBy表达式作为参数传递

lambda表达式只是一个函数。因此,您应该能够使用Func<IEnumerable<TEntity>,IEnumerable<TEntity>>。您实际上想要传入一个接收IEnumerable并发出不同IEnumerable的函数。