我正在阅读使用F#的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从源代码中获取所有项目。但我在两者之间存在演员问题。
以下是使用它的控制器:
[<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()与|&gt;不匹配fromRepository。
类型''b - &gt; Linq.IQueryable&LT; 'c取代;'与该类型不兼容 'SEQ&LT;' 一&GT;”
当查看存储库模块中定义的类型时,我可以看到queryFn是:
val get : source:IQueryable<'a> -> queryFn:seq<'b> -> 'b list
并且getall给出了
unit -> s:System.Linq.IQueryable<'a> -> System.Linq.IQueryable<'a>
答案 0 :(得分:4)
您的Repository.get
不使用source
:D。
将其更改为:
module Repository =
let get (source : IQueryable<_>) queryFn =
queryFn source |> Seq.toList