1

在 F# 项目中使用 ExcelDataReader。要将第一行用作列名(标题),需要使用以下 C# 代码调整配置:

var result = reader.AsDataSet(new ExcelDataSetConfiguration() {
    ConfigureDataTable = (_) => new ExcelDataTableConfiguration() {
        UseHeaderRow = true
    }
});

https://github.com/ExcelDataReader/ExcelDataReader#important-note-when-upgrading-from-exceldatareader-2x中所述

如果我尝试将其翻译为 F# 代码:

let result = reader.AsDataSet (
  new ExcelDataSetConfiguration ( 
     ConfigureDataTable = ExcelDataTableConfiguration ( 
        UseHeaderRow = true)
     )
  )

我收到以下错误:

error FS0001: This expression was expected to have
type 'Func<IExcelDataReader,ExcelDataTableConfiguration>' but here has
type 'ExcelDataTableConfiguration'

如果我理解得很好,我将不得不传递一个 Linq 表达式,所以我看了一些例子:

http://www.fssnip.net/ts/title/F-lambda-to-C-LINQ-Expression

如何使用 F# lambda 创建 Linq 表达式树?

不幸的是,我没有设法解决这个问题。任何指针将不胜感激!

4

1 回答 1

2

好的,比我想象的要简单:

let result = reader.AsDataSet(
  new ExcelDataSetConfiguration( 
    ConfigureDataTable = 
      fun (_:IExcelDataReader) -> ExcelDataTableConfiguration( UseHeaderRow = true)
    )
  )

@Fyodor Soikin,感谢您的支持!

希望这可以帮助其他有同样问题的人。

于 2018-08-23T06:42:23.853 回答