如何在IEnumerable的末尾添加更多查询

本文关键字:添加 查询 IEnumerable | 更新日期: 2023-09-27 18:15:15

我想将查询的一部分作为方法的参数传递。

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

我该怎么做呢?

如何在IEnumerable的末尾添加更多查询

听起来您只是想要一个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(),做他们想做的事情,然后将结果传递回第二个方法。