我有一组活动阶段。我只想得到一个活动阶段。该活动阶段需要是工作流步骤值最高的阶段。我尝试了以下方法,但没有成功:
ActivityPhases = a.ApplicationActivityPhas
.Where(w => w.ActivityPhas.WorkFlowStep == Max(w.ActivityPhas.WorkFlowStep))
.(Select(p => p.ActivityPhas.ActivityPhase)
"最大值";在当前上下文中不存在。
是否需要使用.Where()
?标题说明了这一点,但根据问题措辞,它看起来并不是这样的。如果由于这是一项要求,这个答案不合适,请告诉我,我会删除它。
.NET Framework 4.8
您可以按各自的ActivityPhas.WorkFlowStep
值降序排列活动阶段,然后选择第一个活动阶段:
var activityPhase = a.ApplicationActivityPhas
.OrderByDescending(aap => aap.ActivityPhas.WorkFlowStep)
.First();
小提琴的例子。
.NET 6
我认为你可以通过使用.MaxBy()
运算符来实现你想要的。例如,它允许您定义使用哪个属性作为每个对象的比较值,并返回具有该特定属性的最大值的第一个对象。
var activityPhase = a.ApplicationActivityPhas
.MaxBy(aap => aap.ActivityPhas.WorkFlowStep);
示例fiddle(使用随机类(。
首先,获取最大值,然后获取具有最大值的对象。
var maxValue = a.ApplicationActivityPhas.Max(w => w.ActivityPhas.WorkFlowStep);
var activityPhases = a.ApplicationActivityPhas.Where(w => w.ActivityPhas.WorkFlowStep == maxValue);
如果只有一个活动具有最大值,则可以使用First。
var activityPhase = a.ApplicationActivityPhas.First(w => w.ActivityPhas.WorkFlowStep == maxValue);