2014-10-03 93 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

引用:。“这个结果序列将具有相同的元素作为输入序列的结果可以列举多次的输入序列被列举至多一次且仅只要是必要的高速缓存当重复评估原始序列中的项目在计算上昂贵时,或者如果重复该序列导致用户不希望重复多次的副作用,则序列通常是有用的。“