2014-10-03 128 views
1

我希望能夠理解查詢表達式是如何真正評估的。我有一種情況,我使用查詢表達式來訪問數據庫中的大量數據。然後我通過GUI與這些數據交互。例如,用戶可能會提供我想應用於一列然後繪圖的附加因子。我不清楚的是如何構造它,以便每次GUI更新時都不會從數據庫中提取相同的數據。查詢表達式和懶惰評估

例如:

let a state= query{...} 
let results = a "ALASKA" 
let calcoutput y = results |> Seq.map (fun x -> x.Temperature + y) 

let calcoutput state y = a state |> Seq.map (fun x -> x.Temperature + y) 

我不清楚,如果這些實際上是相同的代碼,如果是這樣我會從數據庫中每次提取數據我執行calcoutput與一個不同的y(看起來如此)。我是否應該將「結果」序列作爲列表進行投射,然後使用它來避免這種情況?

回答

1

您可以使用Seq.cache功能。

http://msdn.microsoft.com/en-us/library/ee370430.aspx

引用:。「這個結果序列將具有相同的元素作爲輸入序列的結果可以列舉多次的輸入序列被列舉至多一次且僅只要是必要的高速緩存當重複評估原始序列中的項目在計算上昂貴時,或者如果重複該序列導致用戶不希望重複多次的副作用,則序列通常是有用的。「