F# - 我可以将Seq.map应用于System.DataSet.DataTableCollection吗?

Ove*_*urg 1 linq f#

这似乎应该有效,但不是:

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#批准的集合类型?

lat*_*kin 5

您正在寻找Seq.cast,这正是您正在寻找的 - 转换IEnumerableIEnumerable<'t>

dataSet.Tables
|> Seq.cast<DataTable>
|> Seq.map (fun x -> x.TableName) 
Run Code Online (Sandbox Code Playgroud)