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



我有一组活动阶段。我只想得到一个活动阶段。该活动阶段需要是工作流步骤值最高的阶段。我尝试了以下方法,但没有成功:

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);

最新更新