查询表达式和懒惰评估

时间:2014-10-03 21:16:37

标签: f#

我希望了解如何真正评估查询表达式。我有一种情况,我使用查询表达式从数据库访问大量数据。然后我通过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)

我不清楚这些是否实际上是相同的代码,如果是这样的话,每当我用不同的y执行calcoutput时,我都会从数据库中提取数据(看起来是这样)。我应该投出"结果"序列作为List然后使用它来避免这个?

1 个答案:

答案 0 :(得分:1)

您可以使用Seq.cache功能。

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

引用:"此结果序列将具有与输入序列相同的元素。结果可以多次枚举。输入序列最多只列举一次,并且只在必要时列举。当重复评估原始序列中的项目在计算上是昂贵的或者如果迭代序列导致用户不希望多次重复的副作用时,缓存序列通常是有用的。"