用 OData Service 访问 US Crime 数据
// 编译命令
//"C:\Program Files\Microsoft SDKs\F#\3.0\Framework\v4.0\fsc.exe" --optimize- --tailcalls- --platform:x86 -r:"C:\Program Files\Reference Assemblies\Microsoft\FSharp\3.0\Runtime\v4.0\FSharp.Core.dll" -r:"E:\Projects\F#3\FSharp.Data.TypeProviders.dll" -r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Profile\Client\System.Core.dll" -r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Profile\Client\System.Data.Services.Client.dll" -r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Profile\Client\System.dll" --noframework TypeProviderODataCrime.fsx
#if INTERACTIVE
#r @"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.Services.Client.dll";;
#endif
open System.Data.Services.Client;;
#if INTERACTIVE
#r @"E:\Projects\F#3\FSharp.Data.TypeProviders.dll"
#endif
open Microsoft.FSharp.Data.TypeProviders;;
open System.Net;;
[<Generate>]
type TCrime = ODataService<"https://api.datamarket.azure.com/data.gov/Crimes">
let Crime() =
let db = TCrime.GetDataContext()
db.Credentials <- new NetworkCredential (
"MSN帐号","主帐户密钥")
let q = query {
for c in db.CityCrime do
where (c.City = "Redmond" || c.City = "Kirkland" || c.City = "Bellevue" || c.City = "Seattle")
where (c.State = "Washington")
where (c.Year = 2008)
sortBy (c.City)
}
q |> Seq.map ( fun n -> ( n.City, (float n.Burglary + float n.PropertyCrime) / float n.Population * 100.0 ))
|> Seq.sortBy ( fun n -> snd n )
|> Seq.iter( fun n -> printfn "%A" n )
Crime()