如果最小序列号等于特定类型的状态,则过滤

时间:2015-12-15 16:49:55

标签: c# linq

嘿我正在尝试创建一个过滤器,以查看有序流程中的下一个待处理步骤是否为类型批准。

每个活动都有一个数字'Sequence',表示步骤的顺序 我需要检查下一个是否正在等待并且是否为类型批准

这是有效的,但它看起来效率很低:

public Expression<Func<IPTORequest, bool>> BuildPendingManagerPTORequestFilterByDivision
                                                             (IPublicReadContext context)
{
   return r => r.Activity.ActivitySteps.Any(a =>
                   a.ActivityStepType == ActivityStepType.Approval 
                   && a.Sequence == a.Activity.ActivitySteps.Where(s => 
                                                  s.Status == ActivityStepStatus.Pending)
                                                            .Min(s => s.Sequence)
    );
}

主要问题是活动步骤正在引用其父级并再次迭代活动步骤。

有没有人知道我可以更有效地做到这一点,而不引用父母?

1 个答案:

答案 0 :(得分:0)

我想我已找到答案,除非有人知道更有效的方式:

public Expression<Func<IPTORequest, bool>> BuildPendingOrderedSequencePTORequestFilter
                                                             (IPublicReadContext context)
{
    return
        r =>
           r.Activity.ActivitySteps.Where(s => s.Status == ActivityStepStatus.Pending)
                .OrderBy(s => s.Sequence)
                .FirstOrDefault()
                .ActivityStepType == ActivityStepType.Approval;

}