我正在寻找将此代码转换为使用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)
这里的棘手事情是输入数据源本质上是必不可少的(您必须调用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)