[英]F#: How to create a Deedle Frame with SQL data source
我試圖弄清楚當數據來自SQL Server時,F#中創建Deedle Frame的最佳方法是什么。 我已經嘗試過類似以下的事情。
#I "../packages/Deedle.0.9.12"
#load "Deedle.fsx"
#r "System.dll"
#r "System.Data.dll"
#r "System.Data.Linq"
#r "FSharp.Data.TypeProviders.dll"
open System
open System.Data
open System.Data.Linq
open Microsoft.FSharp.Data.TypeProviders
open Deedle
type dbSchema = SqlDataConnection<"Data Source=server;Initial Catalog=database;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()
let fr = db.SomeTable |> Frame.ofRows
和其他一些變體。 但是沒有運氣。 對於這件事,我對F#和Deedle都是陌生的。 我可以看到為什么上面的方法不起作用(Frame.ofRows與參數不兼容),但是我不知道什么是進行(或進行)的最佳方法。
Frame.ofRows
函數需要一系列表示框架各行的序列。 與Frame.ofColumns
,如果您已經有一些系列對象(或者從頭開始創建所有對象),則此函數很有用。 它們采用seq<'TRowKey * ISeries<'TColKey>>
類型的輸入。
從某些.NET數據結構創建Deedle框架時,可以使用Frame.ofRecords
,該框架可以在任何序列上工作,並且將使用反射來獲取屬性的名稱(並將它們視為列名稱)。
一個很長的解釋,但是您的代碼中只有幾個字符改變了:-)。 我用羅斯文(Northwind)測試了它:
type Nwind = SqlDataConnection<"""Data Source=.\SQLExpress;
Initial Catalog=Northwind;Integrated Security=SSPI;""">
let db = Nwind.GetDataContext()
// Create data frame from Products table (with appropriate column names)
let fr = db.Products |> Frame.ofRecords
結果是:
ProductID ProductName SupplierID CategoryID QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued OrderDetails Categories Suppliers
0 -> 1 Chai 1 1 10 boxes x 20 bags 18.0000 39 0 10 False System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers
1 -> 2 Chang 1 1 24 - 12 oz bottles 19.0000 17 40 25 False System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers
2 -> 3 Aniseed Syrup 1 2 12 - 550 ml bottles 10.0000 13 70 25 False System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers
3 -> 4 Chef Anton's Cajun Seasoning 2 2 48 - 6 oz jars 22.0000 53 0 0 False System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers
4 -> 5 Chef Anton's Gumbo Mix 2 2 36 boxes 21.3500 0 0 0 True System.Data.Linq.EntitySet`1[OrderDetails] Categories Suppliers
(....)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.