3

私は 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>
4

1 に答える 1

6

あなたRepository.getsource:D を使用しません。

次のように変更します。

module Repository =
    let get (source : IQueryable<_>) queryFn =
        queryFn source |> Seq.toList
于 2013-01-25T11:40:35.807 に答える