我想獲得此查詢的平均值。如何在linq中使用聚合函數
From d In (From c In location.Descendants("temperature") Where c.Attribute("type").Value = "hourly" Select c).Descendants("value")
Take 3
Select d
我可以看到自動完成下拉列表中的聚合關鍵字,但我不知道如何應用它。你能給我一些指點嗎?
我想獲得此查詢的平均值。如何在linq中使用聚合函數
From d In (From c In location.Descendants("temperature") Where c.Attribute("type").Value = "hourly" Select c).Descendants("value")
Take 3
Select d
我可以看到自動完成下拉列表中的聚合關鍵字,但我不知道如何應用它。你能給我一些指點嗎?
只需使用平均擴展方法即可。 (表達式)。平均值()
例如上述
(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()
@Muzz注意到平均()擴展方法,但骨料是一種有用的功能也:
對於行動Aggregate
功能的一個很好的例子,嘗試here。所以,你可以嘗試像以下:
myList = location.Descendants("temperature")
.Where(c => c.Attribute("type").value == "hourly")
.Select(...)
average = myList.Aggregate((i1, i2) => i1+i2)/myList.Length
原諒我轉換爲拉姆達語法,我已經離開了那裏一點你真正得到你需要的整數值。該.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
用C#的結合LINQ表達式特別簡潔的lambda表達式,你可以寫去表達,但非常強大的代碼。如果你對函數式語言有任何經驗,那麼你可以用這些術語來思考這些LINQ結構。
如果可能,您應該使用與OP使用相同的語言發佈代碼示例。 – vcsjones
@vcsjones同意 - 我現在就改正。 – jelford