2 つのクエリがあります。
member private x.CheckIfUserExistsUsingId(userId:int, context:StoryBoardContext) =
<@ context.Users
|> Seq.exists (fun currentUser -> currentUser.Id = userId) @>
と
member private x.FindUserById(userId:int, context:StoryBoardContext) =
<@ context.Users
|> Seq.filter(fun currentUser -> currentUser.Id = userId)
|> Seq.head @>
これをリファクタリングして、2 つの
fun currentUser -> currentUser.Id = userId
次のような 1 つの方法にすることができます。
member private x.IfUserIdMatches (userId:int) =
fun (currentUser:User) -> currentUser.Id = userId
そしてそれを使用します:
member private x.CheckIfUserExistsUsingId(userId:int, context:StoryBoardContext) =
<@ context.Users
|> Seq.exists (x.IfUserIdMatches (userId)) @>
しかし、私はエラーが発生し続けます:
The following construct was used in query but is not recognised by the F#-to-LINQ query translator...
これにより、メソッドの署名が不十分に構築されていると思います。F# を初めて使用するので、Func を返すメソッドを使用して C# でこれを実行できると確信しているため、少し混乱しています。ただし、F# は異なるライブラリを使用して linq クエリを構築しているため、すぐに違いがあることを理解しています。