【问题标题】:C# Linq get maximum of a nested elementC# Linq 获取嵌套元素的最大值
【发布时间】:2022-10-01 00:29:35
【问题描述】:

我有这样的课

public class ValueGroup
{
    public string Name { get; set; }
    public List<Value> Values { get; set; }
}

public class Value
{
    public int RealValue { get; set; }
    public bool IsFavourite { get; set;
}

以及一些物品的清单

var valueList = new List<ValueGroup>
{
    new ValueGroup
    {
        Name = \"1st Group\",
        Values = new List<Value>
        {
            new Value
            {
                RealValue = 6,
                IsFavourite = false
            },
            new Value
            {
                RealValue = 2,
                IsFavourite = true
            },
            new Value
            {
                RealValue = 4,
                IsFavourite = false
            }
        }
    },
    new ValueGroup
    {
        Name = \"2nd Group\",
        Values = new List<Value>
        {
            new Value
            {
                RealValue = 7,
                IsFavourite = false
            },
            new Value
            {
                RealValue = 3,
                IsFavourite = true
            },
            new Value
            {
                RealValue = 8,
                IsFavourite = true
            }
        }
    },
    new ValueGroup
    {
        Name = \"3rd Group\",
        Values = new List<Value>
        {
            new Value
            {
                RealValue = 9,
                IsFavourite = false
            },
            new Value
            {
                RealValue = 1,
                IsFavourite = true
            },
            new Value
            {
                RealValue = 5,
                IsFavourite = false
            }
        }
    }
}

所以,现在我想选择值组,它在嵌套的 ValueList 中具有最高的 RealValue 和 IsFavourit == true。所以在这种情况下,我想选择第二组(第三组的值更大,但这不是 isFavourite)。 是否有机会通过 LINQ 实现这一点?感谢cmets!

    标签: c# linq


    【解决方案1】:

    如果要选择整个ValueGroup 对象,请使用MaxBy

    ValueGroup largestValueGroup = valueList
        .MaxBy(vg => vg.Values
            .Where(v => v.IsFavourite)
            .Max(v => v.RealValue));
    
    Console.WriteLine(largestValueGroup.Name);
    // 2nd Group
    

    通过在该组中找到最大的 RealValue 数字来评估每个组,但前提是 IsFavourite 也为真。在您的示例中,“第 2 组”是结果,因为即使第 3 组的 RealValue 更高,它也不是最喜欢的。

    【讨论】:

    • 只是一个杂项说明,如果一个组中有所有 IsFavorite = false - .Max 将抛出关于 Sequence contains no elements 的异常。在.MaxBy 之前添加.Where(x =&gt; x.Values.Any(z =&gt; z.IsFavourite)) 怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2019-05-08
    • 2020-03-21
    相关资源
    最近更新 更多