这似乎应该有效,但不是:
let dataSet = new DataSet()
let dataTable1 = dataSet.Tables.Add("Bob")
let dataTable1 = dataSet.Tables.Add("Bilf")
let tableNames = Seq.map (fun (x:DataTable) -> x.TableName) dataSet.Tables
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
The type 'DataTableCollection' is not compatible with the type 'seq<DataTable>'
Run Code Online (Sandbox Code Playgroud)
尝试手动强制转换时,同样的错误仍然存在:
let tableNames = Seq.map (fun (x:DataTable) -> x.TableName) (seq<DataTable> dataSet.Tables)
Run Code Online (Sandbox Code Playgroud)
有没有办法在DataTableCollection上执行F#样式的序列操作,还是需要先将DataTableCollection手动转换为F#批准的集合类型?
您正在寻找Seq.cast,这正是您正在寻找的 - 转换IEnumerable为IEnumerable<'t>
dataSet.Tables
|> Seq.cast<DataTable>
|> Seq.map (fun x -> x.TableName)
Run Code Online (Sandbox Code Playgroud)