Что эквивалентно EF C # ToListAsync в F #? - PullRequest
2 голосов
/ 01 октября 2019

У меня есть следующий код в C #:

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

, где db - это Eb 6 DbContext.

Как написать эквивалентную вещь в F #, предполагая, что я получаю доступ к тому же DbContext?

Я придумал этот код, но застрял:

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
}

Спасибо

Ответы [ 2 ]

6 голосов
/ 01 октября 2019

Нет проблем с использованием .ToListAsync() в F #. Я предполагаю, что смысл вашей путаницы в том, чтобы заставить C # await хорошо играть с F # async.

. В этом случае вы должны использовать Async.AwaitTask Вот код

async {
    let! q = db.Table.ToListAsync() |> Async.AwaitTask //here you have a C# list
}
1 голос
/ 17 октября 2019

Я обычно использую TaskBuilder.fs , если большая часть того, что я делаю, будет использовать задачи c #. Я считаю, что это предпочтительнее, чем конвертировать туда и обратно между Async и Task, но это зависит от используемого API.

add от Nuget

dotnet add package TaskBuilder.fs --version 2.1.0

открыть и использовать задачу

open FSharp.Control.Tasks.V2

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