2014-10-03 4 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) 

내가 명확하지 않다, 그래서 나는 DB에서 때마다 데이터를 당겨하고 만약 내가 함께 calcoutput을 실행 다른 y (그렇게 보입니다). "결과"시퀀스를 목록으로 캐스팅하고이를 사용하여이를 피할 수 있습니까?

답변

1

Seq.cache 기능을 사용할 수 있습니다.

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

인용구 :... "이 결과 시퀀스 입력 시퀀스와 동일한 요소 것 결과를 여러 번들 수 입력 시퀀스는 많아야 한번 열거되고까지만 필요 캐싱 시퀀스는 일반적으로 원래 시퀀스의 항목을 반복적으로 평가하는 데 비용이 많이 드는 경우 또는 시퀀스를 반복하면 사용자가 여러 번 반복하고 싶지 않은 부작용이 발생할 때 일반적으로 유용합니다. "