【发布时间】:2015-03-10 02:47:13
【问题描述】:
我有一个如下形式的查询表达式:
let result = query { for row in context.Table do
where (row.id = 111111)
select (row.col1,row.col2,row.col3) }
Result 返回 IQueryable
我可以尝试像这样改变它:
let result :seq<float>*seq<float>*seq<float> = query { for row in context.Table do
where (row.id = 111111)
select (row.col1,row.col2,row.col3) }
|> Seq.cast
但我明白了:
类型不匹配。期望 IQueryable
类型 'seq
我做错了什么?
编辑:这就是我想要做的,听起来我的问题可能会给我一个有用的答案,但不是做我想做的最好的方法。这段代码很难看,但有效:
let col1 : seq<float> = query { for row in context.Table do
where (row.id = 111111)
select row.col1 }
|> Seq.cast
let col2 : seq<float> = query { for row in context.Table do
where (row.id = 111111)
select row.col2 }
|> Seq.cast
let model = MathNet.Numerics.Interpolation.CubicSpline.InterpolateAkima(col1,col2)
如果我不强制转换为浮动,InterpolateAkima 将无法工作,因为它不接受 Nullable 类型。不过,我不想自己对每一列进行查询。我的最终目标是有一个函数,我可以传入 row.id 的任何值并获取 col1,col2 然后 col1,col3 等的模型。
【问题讨论】:
-
你为什么要
seq<float>*seq<float>*seq<float>?你期望它是什么? -
@MarkSeemann,我将表中的值传递给不接受可为空值的函数。如果我一次拉一列,我可以使用 |> Seq.cast 转换为浮点数。我希望能够一次拉出所有列。
标签: f#