私は F# を使用した Web クラウドおよびモバイル ソリューションを読んでおり、著者が構築している Web サイトをフォローしようとしています。しかし、私にはいくつかの問題があり、解決できません。私がやっていることのロジックは理解していますが、それを機能させるためのコードの一部が欠けているようです.19ページまで読みました.
次のリポジトリ モジュールがあります。
module Repository =
let get (source : IQueryable<_>) queryFn=
queryFn |> Seq.toList
let getAll ()=
fun s -> query { for x in s do
select x }
ソースからすべての項目を取得するために、queryFn で getAll を使用するという考え方です。しかし、私は 2 つの間にキャストの問題があります。
これを利用するコントローラーは次のとおりです。
[<HandleError>]
type GuitarsController(context : IDisposable, ?repository ) =
inherit Controller()
let fromRepository =
match repository with
| Some v -> v
| _ -> (context :?> FsMvcAppEntities).guitars
|> Repository.get
new() = new GuitarsController(new FsMvcAppEntities())
member this.Index() =
getAll()
|> fromRepository
|> this.View
getAll() は |> fromRepository ではうまくいきません。
タイプ ''b -> Linq.IQueryable<'c>' は、タイプ ''seq<'a>' と互換性がありません。
リポジトリ モジュールで定義されている型を見ると、queryFn が次のようになっていることがわかります。
val get : source:IQueryable<'a> -> queryFn:seq<'b> -> 'b list
getall は
unit -> s:System.Linq.IQueryable<'a> -> System.Linq.IQueryable<'a>