gpt4 book ai didi

c# - 不带组的对象的 Linq 总和

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:57 25 4
gpt4 key购买 nike

这看起来很简单,但出于某种原因我没有理解。

给定:

public class Foo
{
public List<Bar> Bars { get; private set; }
public Bar Totals { get; private set; }

public Foo()
{
// Blah blah something to populate List of Bars
this.Bars = new List<Bar>()
{
new Bar("Some dude", 50, 1),
new Bar("Some other dude", 60,25)
};

// Calculate Total
var totals = Bars
.GroupBy(gb => gb.CustomerName) // When I comment out line i get "Bar does not contain a definition for "Sum" and no extension...." I want the sum of this without the group.
.Select(s => new
{
Cost = s.Sum(x => x.Cost),
Donation = s.Sum(x => x.Donation),
}
).ToList();

Totals = new Bar("Totals", totals[0].Cost, totals[0].Donation);

}

}

public class Bar
{
public string CustomerName { get; private set; }
public int Cost { get; private set; }
public int Donation { get; private set; }
public int Total { get { return Cost + Donation; } }

public Bar(string customerName, int cost, int donation)
{
this.CustomerName = customerName;
this.Cost = cost;
this.Donation = donation;
}
}

我在这里遇到了一些问题:

-这适用于分组依据,但是如果我根据这是我的最终目标取出分组,我会得到“Bar does not contain a definition for”Sum “并且没有扩展......”。我想要整个集合的这个总和,所以不想分组依据。

-我在放入 Bar 之前创建了一个 anon 对象,因为我不确定如何在没有无参数构造函数的情况下创建 Bar(而且我无法向这个特定类添加一个)

-我不喜欢使用索引 0 访问“var totals”数据 - 我不应该在最后使用 ToListing 吗?如果没有,我如何访问这些属性? totals.Cost 不起作用。

请帮我找出解决我的问题的正确方法(特别是本段上面的 3 个要点)。对流利的(和一般的 linq)语法很陌生,我正在尝试找出正确的方法。

编辑:

感谢大家的回复。结合几个答案确实让我达到了我的最终目标(但最感谢 D Stanley)

这就是我现在的实现方式:

public Foo()
{
// ....

// Calculate Total
Totals = new Bar("Totals", Bars.Sum(s => s.Cost), Bars.Sum(s => s.Donation));
}

我想我只是让它变得比需要的更复杂! :O

最佳答案

s lambda 中的变量类型为 Bar如果你删除 GroupBy .你希望它是 List<Bar>而不是你的情况。所以,我认为你想要的是:

var totalCosts = Bars.Sum(x => x.Cost);
var totalDonations = Bars.Sum(x => x.Donation);

关于c# - 不带组的对象的 Linq 总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25673400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com