F#附加到循环中的列表

Ala*_*gan 0 f# list

我正在寻找将此代码转换为使用F#列表而不是C#列表实现。

我连接到数据库并通常使用C#运行查询会创建一个类型的列表,并在datareader具有值时继续添加该列表。我将如何将其转换为使用F#列表

    let queryDatabase (connection: NpgsqlConnection) (queryString: string) =
        let transactions = new List<string>()
        let command = new NpgsqlCommand(queryString, connection)
        let dataReader = command.ExecuteReader()

        while dataReader.Read() do
           let json = dataReader.GetString(1)
           transactions.Add(json)
        transactions
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 5

这里的棘手事情是输入数据源本质上是必不可少的(您必须调用Read它来改变内部状态)。因此,您正在从命令式世界过渡到功能性世界-因此您无法避免所有变异。

我可能会使用列表理解来编写代码,该列表保持相似的熟悉结构,但删除了显式的突变:

let queryDatabase (connection: NpgsqlConnection) (queryString: string) =
  [ let command = new NpgsqlCommand(queryString, connection)
    let dataReader = command.ExecuteReader()
    while dataReader.Read() do
      yield dataReader.GetString(1) ]
Run Code Online (Sandbox Code Playgroud)