3 回答

TA贡献1828条经验 获得超3个赞
根据您的描述,您似乎有一个包含某个键TKey和一个值的字典object。
var sampleDictionary = new Dictionary<TKey, object>();
... populate dictionary ...
我们并不真正关心密钥。如果您的object实例类型可转换为doubles,那么您可以做一些不同的事情:
// Perform a LINQ operation on the `Values` collection of the dictionary:
var sum = sampleDictionary.Values.Select(v => Convert.ToDouble(v)).Sum();
或者
// Perform a LINQ operation directly on the dictionary
// Use this is if you might potentially need to incorporate TKey into your result
var sum = sampleDictionary.Select(d => Convert.ToDouble(d.Value)).Sum();
.Sum()如果愿意,您还可以将 lambda 移入函数中,以缩短它:
var sum = sampleDictionary.Values.Sum(v => Convert.ToDouble(v));
或者
var sum = sampleDictionary.Sum(d => Convert.ToDouble(d.Value));
这里没有一种方法真的比另一种更好,只需选择一种现在可以工作并且在您的应用程序上下文中有意义的方法。
如果您objects可能无法转换为double,请在评论中告诉我们,因为这必须进行一些重构。

TA贡献1772条经验 获得超8个赞
看起来我的问题的答案是在我的字典上简单地使用 LINQ .sum。我收到了两个这样的答案,但我只能接受其中一个。
为了为我试图做的事情提供更多背景......
beestatData.Data.Where(datum =>
isWithinDateRange(new DateTime((int)datum.Year, (int)datum.Month, (int)datum.Day), startDate, endDate))
.Sum(datum => datum.AuxiliaryHeat1/60/60);
我不仅第一次使用 C#,而且还尝试使用 JSON 从我的 Ecobee 恒温器中获取数据。为了以各种方式定制数据,我最终得到了一堆不同的函数,它们可以抓取数据并在循环中对其进行操作。我认为这会变得一团糟,并认为使用函数式编程是可行的方法。
我发现 .Where 大致相当于 Java 中的 .filter,但我怀疑 .Sum 是否与 .mapToDouble.Sum() 相同。我很高兴看到答案很简单,现在我可以轻松地在特定日期内获取系统的总运行时间。
注意:这还没有编译和工作,但我相信这是由于我的代码中的其他内容。
添加回答
举报