我想获得此查询的平均值。
From d In (From c In location.Descendants("temperature") Where c.Attribute("type").Value = "hourly" Select c).Descendants("value")
Take 3
Select d
我可以在自动完成下拉列表中看到聚合关键字,但我无法弄清楚如何应用它。你能给我一些指示吗?
答案 0 :(得分:4)
有关Aggregate
函数的一个很好的示例,请尝试here。所以你可以尝试以下内容:
myList = location.Descendants("temperature")
.Where(c => c.Attribute("type").value == "hourly")
.Select(...)
average = myList.Aggregate( (i1, i2) => i1+i2) / myList.Length
请原谅我对lambda语法的转换,我遗漏了你实际获得所需整数值的位置。 .Aggregate函数有点像函数式语言fold_left
:
(new [] {1, 2, 3, 4}).Aggregate( (i1, i2) => i1+i2)
就像写作:
((1 + 2) + 3) + 4
要使用链接中的示例,您可以通过执行以下操作来实现以逗号分隔的列表:
IQueryable<String> ListOfStrings = ...
ListOfStrings.Aggregate((s1, s2) => s1 + ", " s2)
通过将像Aggregate
这样的Linq表达式与C#特别简洁的lambda表达式相结合,您可以编写真正富有表现力且非常强大的代码。如果您有使用函数式语言的经验,可以用这些术语来考虑这些LINQ结构。
答案 1 :(得分:1)
只需使用平均扩展方法即可。 (表达式)。平均()
e.g。
(From d In (From c In location.Descendants("temperature") Where c.Attribute("type").Value = "hourly" Select c).Descendants("value")
Skip GetTimeOffset() Take 1
Select d).Average()