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()
}
我在 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()
}