c# array of objects 如何根据 object.b 属性 求和 object.a 属性

c# array of objects how to sum object.a property based on object.b property

我正在使用 c# .NET 4.8。我有一组对象。这些对象具有属性,我只想在另一个 属性 不为 null 的情况下获得所有属性之一的总和。

所以如果我在一个数组中有这 3 个对象:

myObject[] objectArray = [
    new myObject{ a = 1, b = 2 },
    new myObject{ a = 3 },
    new myObject{ a = 4, b = 5 }
];

我只想在 myObject.b 不为空时对 myObject.a 求和,在本例中为 5(1 来自 objectArray[0].a,4 来自 objectArray[2].a)。

我正在尝试使用 linq 来完成此操作,但在弄清楚它的语法时遇到了问题。

我试过这个:

objectArray.Select(x => x.a).Where(x.b != null).Sum();

但在我的 Where 语句中尝试引用 x.b 时出现以下错误:

Cannot resolve symbol 'x'

我一直在思考如何格式化此 linq 查询以获得我需要的值。如果有人能给我一些关于如何完成我在这个问题中概述的内容的指导,我将不胜感激。正确、解释清楚的答案将被标记为已接受和点赞。谢谢。

您忘记了 Where 表达式接收枚举序列中的当前项。所以它应该是 Where(x => x.b != null) 但你还需要告诉 Sum 表达式你想要求和的内容。 Select 部分根本不需要。

所以,假设 b 是一个可空类型(IE int?b {get;set;})那么你可以得到a 的总和,其中 b 以一种简单的方式为 null

var result = objectArray.Where(x => x.b != null).Sum(k => k.a);

我想你要做的就是先过滤它,然后再添加。示例:

public class O
{
    public int A { get; set; }
    public int? B { get; set; }
}

var initList = new List<O>
{
    new O {A= 1, B = 2},
    new O {A= 2},
    new O {A= 3, B = 2},
};

var sum = initList.Where(item => item.B != null).Sum(item => item.A);

我的做法是这样的:

var sum = objectArray.Where(x => x.b != null).Sum(x => x.a);