【发布时间】:2015-04-20 20:24:14
【问题描述】:
我有一个很好的方法:
member this.GetItems =
let db = dbSchema.GetDataContext()
let getQuery =
query {
for row in db.ItemsTable do
select row
}
getQuery
|> Seq.map (fun e -> new Item(e.ItemId, e.ItemName ))
|> Seq.toArray
它对数据库进行选择查询,将每条记录转换为对象并返回一个此类对象的数组。
我想将此方法一分为二。第一个必须更一般。它获取查询和函数将记录转换为对象。
这是我的代码:
member private this.ExecuteSelectQuery(query, transform_function) =
let db = dbSchema.GetDataContext()
query
|> Seq.map transform_function
|> Seq.toArray
member this.GetItems =
let db = dbSchema.GetDataContext()
this.ExecuteSelectQuery
query {
for row in db.ItemsTable do
select row
}
(fun e -> new Item(e.ItemId, e.ItemName ))
但我得到了错误:
- 在这个表达式中需要类型 'a * ('b -> 'c) 但有一个类型 QueryBuilder
- 这种结构只能用于 For 方法的情况
我该如何解决?
更新:
member private this.ExecuteSelectQuery query transform_function =
let db = dbSchema.GetDataContext()
query
|> Seq.map transform_function
|> Seq.toArray
member this.GetItems =
let db = dbSchema.GetDataContext()
this.ExecuteSelectQuery
query {
for row in db.ItemsTable do
select row
}
(fun e -> new Item(e.ItemId, e.ItemName ))
【问题讨论】:
标签: f#