F# 中 EF C# ToListAsync 的等价物是什么?

What is the equivalent of EF C# ToListAsync in F#?

我在 C# 中有以下代码:

public async Task<List<Table>> GetRows()
{
  return await db.Table.ToListAsync();
}  

其中 db 是 EF 6 DbContext。

假设我访问相同的 DbContext,我如何在 F# 中编写等效的东西?

我想到了这段代码,但我卡住了:

let getRows = async {
   let q = query { 
         from r in db.Table
             select r
         }
   q |> Seq.map(fun row -> ...) // <-- Here I might want to do some custom function
}

谢谢

在F#中使用.ToListAsync()没有问题。我假设你的困惑点是让 C# await 与 F# async.

很好地配合

在这种情况下,您应该使用 Async.AwaitTask 这是一个代码

async {
    let! q = db.Table.ToListAsync() |> Async.AwaitTask //here you have a C# list
}

我通常使用 TaskBuilder.fs,如果我所做的大部分工作将使用 C# 任务。我发现这比在 Async 和 Task 之间来回转换更可取,但这取决于所使用的 api。

从 Nuget 添加

dotnet add package TaskBuilder.fs --version 2.1.0

打开并使用任务

open FSharp.Control.Tasks.V2

task {
    let! q = db.Table.ToListAsync()
}