如何在 C# Where 子句中使用集合中的最大值?

How to use the Max Value from a Collection in a C# Where Clause?

我收集了 activity 个阶段。我只想得到一个 activity 阶段。 activity 阶段必须是工作流步骤值最高的阶段。我尝试了以下方法,但没有成功:

ActivityPhases = a.ApplicationActivityPhas
                 .Where(w => w.ActivityPhas.WorkFlowStep == Max(w.ActivityPhas.WorkFlowStep))
                 .(Select(p => p.ActivityPhas.ActivityPhase)

"Max" does not exist in the current context.

先取最大值,再取最大值对象

var maxValue = a.ApplicationActivityPhas.Max(w => w.ActivityPhas.WorkFlowStep);
var activityPhases = a.ApplicationActivityPhas.Where(w => w.ActivityPhas.WorkFlowStep == maxValue);

如果只有一个 activity 具有最大值,则可以使用 First 代替。

var activityPhase = a.ApplicationActivityPhas.First(w => w.ActivityPhas.WorkFlowStep == maxValue);

是否需要使用 .Where()?标题说明了这一点,但根据问题的措辞,它看起来不像是这样。如果这个答案因为它是一个要求而不合适,请让我知道,我会删除它。

.NET Framework 4.8

您可以按各自的 ActivityPhas.WorkFlowStep 值降序排列 activity 阶段,然后 select 第一个 activity 阶段:

var activityPhase = a.ApplicationActivityPhas
    .OrderByDescending(aap => aap.ActivityPhas.WorkFlowStep)
    .First();

示例 fiddle here.

.NET 6

我认为您可以使用 .MaxBy() 运算符实现您想要的结果。它可以让你定义例如其中 属性 用作每个 object 的比较值,returns 第一个 object 具有该特定 属性.[=18= 的最大值]

var activityPhase = a.ApplicationActivityPhas
    .MaxBy(aap => aap.ActivityPhas.WorkFlowStep);

示例fiddle(使用随机class)here.