我正在阅读 Web 云和使用 F# 的移动解决方案,我尝试关注作者正在构建的网站。但是我有一些问题,我无法解决。我理解我正在做的事情的逻辑,但似乎缺少一些代码来让它工作。我已经阅读了第 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 从源中获取所有项目。但是我在两者之间有一个转换问题。
这是使用它的 Controller :
[<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。
The type ''b -> Linq.IQueryable<'c>' is not compatible with the type 'seq<'a>'.
查看存储库模块中定义的类型时,我可以看到 queryFn 是:
val get : source:IQueryable<'a> -> queryFn:seq<'b> -> 'b list
getall 给出
unit -> s:System.Linq.IQueryable<'a> -> System.Linq.IQueryable<'a>
最佳答案
您的 Repository.get
没有使用 source
:D。
将其更改为:
module Repository =
let get (source : IQueryable<_>) queryFn =
queryFn source |> Seq.toList
关于f# - F# 中的 Seq 和 IQueryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14519788/