簡體   English   中英

F#:如何使用SQL數據源創建Deedle框架

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM