如何在 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.
我收集了 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.