Csv类型提供程序中的行类型是什么?

时间:2017-03-04 17:20:30

标签: types f# type-providers

我创建了一个Csv类型提供程序:

type AssetInfo = CsvProvider<Sample="AssetInfoFS.csv", // must be a Literal
                             HasHeaders=true,
                             ResolutionFolder=projDataPath,
                             AssumeMissingValues=false,
                             CacheRows=false>

然后我加载了一些信息并丢弃了一些行:

let assetInfo = AssetInfo.Load(projDataPath + @"AssetInfoFS.csv")
let traderInfoRecords =
    assetInfo.Rows
    |> Seq.filter (fun elem -> Set.contains elem.Ticker tradedTickerSet)

接下来,我尝试创建一个记录类型,该行将一行作为其值之一:

type Asset = {Ticker: string; Info: CsvProvider<...>.Row; DataFrame: Frame<DateTime,string>}

我使用CsvProvider<...>.Row然后MoveNext()Current GetType() IEnumerator获得assetInfo.Rows assetInfo。不幸的是,编译器不接受该表达式作为类型。我尝试了其他一些没有成功的事情。

如何找到DELETE placement, employees FROM placement, employees WHERE placement.id_emp = employees.id_emp AND employees.id_emp = 113; 行的类型,以便我可以在资产类型声明中使用它?

1 个答案:

答案 0 :(得分:3)

在您的情况下,该行的类型为AssetInfo.Row

我做了一个简短的例子,我有一个带有两列的CSV,名为Header1和Header2。我现在可以做到以下几点:

module Test

open FSharp.Data

type File = CsvProvider<"""..\test.csv""">

let f (input : File.Row) = input.Header1

通过明确地将参数类型命名为f,Intellisense会向我显示该类型的两个字段。