CSV类型提供程序在F#interactive中找不到列

CSV类型提供程序在F#interactive中找不到列,f#,type-providers,f#-interactive,f#-data,F#,Type Providers,F# Interactive,F# Data,假设我有一个CSV文件,它的标题包含“人口”和“利润”列,我想在F#interactive中使用它。我有以下代码: #r "../packages/FSharp.Data.1.1.10/lib/net40/FSharp.Data.dll" open FSharp.Data // load csv header let cities = new CsvProvider<"cities.csv">() // how to reach data let firstRow = citi

假设我有一个CSV文件,它的标题包含“人口”和“利润”列,我想在F#interactive中使用它。我有以下代码:

#r "../packages/FSharp.Data.1.1.10/lib/net40/FSharp.Data.dll"

open FSharp.Data

// load csv header
let cities = new CsvProvider<"cities.csv">()

// how to reach data
let firstRow = cities.Data |> Seq.head
let firstPopulation = firstRow.Population
let firstProfit = firstRow.Profit
#r.。/packages/FSharp.Data.1.1.10/lib/net40/FSharp.Data.dll”
打开FSharp.Data
//加载csv头文件
let cities=新的CsvProvider()
//如何获取数据
设第一行=cities.Data |>Seq.head
让firstPopulation=firstRow.Population
让firstProfit=firstRow.Profit
我从F#interactive得到一个错误:

错误FS0039:未定义字段、构造函数或成员“填充”

这似乎让我感到困惑,因为VS中的intellisense通过CSV类型的提供程序从我的数据中获取此列没有问题

另外,我尝试用相同的类型提供程序创建一个程序,结果一切正常。像这样:

open FSharp.Data

[<EntryPoint>]
let main argv = 
    use file = System.IO.File.CreateText("result.txt")
    let csv = new CsvProvider<"cities.csv">()
    for record in csv.Data do
        fprintfn file "%A" record.Population
    0
打开FSharp.Data
[]
让主argv=
使用file=System.IO.file.CreateText(“result.txt”)
让csv=新CsvProvider()
用于csv中的记录。数据do
fprintfn文件“%A”记录。填充
0
我错过什么了吗?谢谢你的回答

试试这段代码

let Cities = new CsvProvider<"cities.csv">()
let cities = new Cities()
let firstRow = cities.Rows |> Seq.head
let Cities=new CsvProvider()
让城市=新城市
让firstRow=城市。行|>Seq.head

能否尝试使用CSV文件的完整路径?(有时候F#Interactive会对路径感到困惑…)这很奇怪。你确定你已经把所有的电话都发到fsi了吗?我刚试过类似的方法,但效果很好。您使用的是什么版本的VS?如果路径有问题,它将给出一个明确的错误,除非通过更改,在其他地方有一个cities.csv没有人口列。如果您首先命名列,例如
xyzy
,通过尝试执行锁定TP到FSI会话,则可能会发生这种情况,然后将列重命名为
Population
,并尝试在同一FSI会话中再次执行。然后VS(和Intellisense)中的TP实例将知道属性名称的更改,但绑定FSI的实例不会。尝试重置FSI会话并重复尝试运行。Tomas,我已将路径更改为完整路径,它将开始工作。同样,你是对的,最初是不同的列名。