我想将查询的一部分作为方法的参数传递。
public IEnumerable<ServiceModel> Get(/*What would the type be*/ rightQuery)
{
IEnumerable<EntityModel> leftQuery = repository.GetAll;
// the query appending might look something like this:
var outcomeBeforeMapping = leftQuery.rightQuery;
// ...rest is not important
}
调用可能如下所示:
service.Get((query) => query.OrderByDescending(project => project.SortOrder));
我该怎么做?
听起来你只想要一个 Func<IEnumerable<ServiceModel>, IEnumerable<ServiceModel>>
- 换句话说,“给出一个问题,我会给你另一个问题。”
public IEnumerable<ServiceModel> Get(
Func<IEnumerable<ServiceModel>, IEnumerable<ServiceModel>> transform)
{
IEnumerable<EntityModel> leftQuery = repository.GetAll;
var outcomeBeforeMapping = transform(leftQuery);
...
}
您应该考虑使用 IQueryable<T>
而不是 IEnumerable<T>
为此,如果您使用的是 EF 等,则允许转换影响 SQL 而不是仅在本地应用。
您还应该考虑简单地将操作的第一部分与第二部分分开 - 允许用户调用 GetAll()
,做他们想做的事,然后将结果传递回第二个方法。
我是一名优秀的程序员,十分优秀!