如何在c#中的方法中传递一些Order条件

时间:2017-06-25 16:57:17

标签: c# func

我正在创建一个传递可选谓词的方法,但在某些情况下我需要对从此方法过滤的数据进行排序。我不知道如何通过谓词本身传递订单条件,或者还有其他方法可以做到这一点?

  

但请记住,我需要动态传递排序条件,因为在不同的部分有不同的排序条件

当我从方法中获取数据时,我会应用排序条件,但正如您在方法中看到的那样,AutoMapper正在完成其工作,只从TechArchiveNoSubsYpdcResult模型中获取必要的属性。有时我需要使用TechArchiveNoSubsYpdcResult模型本身未包含的模型CompletedJobViewModel中的属性来对数据进行排序。

public IEnumerable<CompletedJobViewModel> GetCompletedJobsViewModels(Guid vesselId, int year, Func<TechArchiveNoSubsYpdcResult, bool> predicate = null)
    => Mapper.Map<IEnumerable<CompletedJobViewModel>>(GetArchiveNoSubsYpdcResults(vesselId, year).OptionalWhere(predicate));

有人知道如何在方法中传递动态排序条件吗?

AutoMapper将TechArchiveNoSubsYpdcResult映射到CompletedJobViewModel

我正在寻找类似于“谓词”的命令:

public IEnumerable<CompletedJobViewModel> GetCompletedJobsViewModels(Guid vesselId, int year, Func<TechArchiveNoSubsYpdcResult, bool> predicate = null, Order<Something> orderCondition = null)
    => Mapper.Map<IEnumerable<CompletedJobViewModel>>(GetArchiveNoSubsYpdcResults(vesselId, year).OptionalWhere(predicate)).OptionalOrder(orderCondition);

1 个答案:

答案 0 :(得分:1)

如果您需要按单个字段进行排序,可以选择&#34;键选择器&#34;功能,像这样:

public IEnumerable<CompletedJobViewModel> GetCompletedJobsViewModels<TKey>(Guid vesselId, int year, Func<TechArchiveNoSubsYpdcResult, bool> predicate = null, Func<TechArchiveNoSubsYpdcResult,TKey> keySelector = null) {
    var res = Mapper.Map<IEnumerable<CompletedJobViewModel>>(GetArchiveNoSubsYpdcResults(vesselId, year).OptionalWhere(predicate));
    if (keySelector != null) {
        res = res.OrderBy(keySelector);
    }
    return res;
}

Demo.