我试图找出当数据来自 SQL 服务器时,在 F# 中创建 Deedle 框架的最佳方法是什么。我尝试过类似以下的事情。
#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 与参数不兼容),但我不知道继续的最佳方法是什么(甚至不知道如何继续)。
The 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
(....)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)